2010-11-16 9 views
1

un problème très simple, peut-être quelqu'un a un pourboire pour un débutant MVC comme moi. Je veux protéger par mot de passe une application MVC - juste sur utilisateur/mot de passe est nécessaire - je l'ai fait via ASPNETDB et SqlMembershipProvider, mais il devrait y avoir un moyen plus facile - dans webforms je l'ai fait en ajoutant utilisateur/mot de passe à web.config.Simple utilisateur/mot de passe de protection dans asp.net MVC

Ai-je vraiment besoin d'écrire mon propre XmlMembershipProvider pour résoudre ce problème? Si oui, connaissez-vous un XmlMembershipProvider existant très simple qui peut le faire pour moi? Un grand merci à l'avance ..

Répondre

1

Vous n'avez pas besoin d'utiliser un fournisseur d'adhésion afin de protéger votre application par mot de passe. Vous devez simplement fournir un service pour valider les informations d'identification de l'utilisateur. Vous pouvez regarder here pour une idée sur la façon de le faire. Fondamentalement, vous devez générer un sel, puis hacher le mot de passe de l'utilisateur en utilisant ce sel (et le mot de passe fourni). Ensuite, vous stockez le sel et le mot de passe haché dans la base de données. Essayez-le, ce n'est pas difficile. Après avoir validé les informations d'identification de l'utilisateur, vous pouvez utiliser le code que j'ai écrit in this SO question pour utiliser l'authentification par formulaire.

À la votre!

+0

Merci beaucoup, je l'ai fait pendant ce temps via mon propre MembershipProvider - juste écrasé ValidateUser et cela a fonctionné - mais votre solution est encore plus simple ... –

2

Salut si vous avez démarré un projet mvc avec Visual Studio, vous avez un UserController standard. Si vous regardez dans cette classe, vous trouverez la méthode suivante:

public virtual ActionResult LogOn(LogOnModel model, string returnUrl) 

Vous pouvez impelement votre propre code dans cette fonction pour valider le mot de passe et d'ouverture de session.

Par exemple:

public virtual ActionResult LogOn(LogOnModel model, string returnUrl) 
{ 
    if(model.Password == "YourPassword" && model.UserName == "YourUserName") 
    { 
     FormsService.SignIn(model.UserName, model.RememberMe); 
     if (!String.IsNullOrEmpty(returnUrl)) 
     { 
      return Redirect(returnUrl); 
     } 
     else 
     { 
      return RedirectToAction("ActionName"); 
     } 
    } 
    else 
    { 
     ModelState.AddModelError("", "Wrong credentials."); 
     return View(model); 
    } 
} 

espérons que cela vous aidera. Cordialement

0

Pourquoi XML MembershipProvider? Vous devez juste hériter du formulaire IMembershipProvider et implémenter la fonctionnalité dont vous avez besoin.

+0

Je pensais à stocker utilisateur/Passwd insinde un fichier xml ou web.config. –

5

Ce que j'ai finalement été:

public class MyMembershipProvider : MembershipProvider { 
    // ... 
    public override bool ValidateUser(string username, string password) 
    { 
    return FormsAuthentication.Authenticate(username, password); 
    } 
} 

web.config:

<authentication mode="Forms"> 
    <forms loginUrl="~/Account/LogOn" timeout="2880" > 
    <credentials passwordFormat="Clear"> 
     <user name="rga" password="XYZ"/> 
    </credentials> 
    </forms> 
</authentication> 

...

<membership defaultProvider="XmlMembershipProvider"> 
    <providers> 
     <clear/> 
     <add name="MyMembershipProvider" type="Namespace.Of.MyMembershipProvider" 
      enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false" 
      maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10" 
      applicationName="/" /> 
    </providers> 
</membership> 

Il n'y avait pas besoin de changer AccountController. Merci pour votre aide.

+0

c'est délicieusement simple pour les sites personnels avec un seul login et pas de vrais utilisateurs – 5uperdan