【问题标题】:Validating the user with Membership Provider使用 Membership Provider 验证用户
【发布时间】:2011-07-29 21:28:31
【问题描述】:

我正在我的应用程序 Asp.net MVC 3 中自定义一种用户验证形式。

如何实现方法ValidateUser

我的问题是MembershipUser 类(我也自定义)的密码有一个密码属性。

我正在使用 EF CodeFirst .. 以下代码:

会员用户

public class User : MembershipUser
{

    public User(string username, object providerUserKey, string email, string passwordQuestion, bool isApproved,
                    bool isLockedOut)
        : base("", username, providerUserKey, email, passwordQuestion, "", isApproved, isLockedOut, DateTime.Now, DateTime.MinValue,
                DateTime.Now, DateTime.MinValue, DateTime.MinValue)
    {
    }

}

MembershipProvider

public class UserProvider : MembershipProvider
{

    public override bool ValidateUser(string email, string password)
    {
        var bytes = new ASCIIEncoding().GetBytes(password);
        var encryptedPassword = EncryptPassword(bytes);
        using (var db  = new DataContext())
        {
            var user = from u in db.Users
                        where u.Email == email
                        /* How to compare password? */
        }
    }

}

请问有没有完整的文章介绍了这个类的实现?

【问题讨论】:

  • 你能在你将用户添加到数据库的地方添加代码吗?

标签: asp.net-mvc-3 razor forms-authentication membership-provider custom-membershipprovider


【解决方案1】:

我没有一个完整的例子,但这对你不起作用吗?

public class UserProvider : MembershipProvider
{
    public override bool ValidateUser(string email, string password)
    {
        var bytes = new ASCIIEncoding().GetBytes(password);
        var encryptedPassword = EncryptPassword(bytes);
        var user = db.Users.FirstOrDefault(x =>
              x.EmailAddress == emailAddress && x.Password == encryptedPassword);

        return user != null;
    }
}

【讨论】:

  • EncryptPassword 在数据库中返回一个byte[] 数组,但它是一个字符串。
猜你喜欢
  • 1970-01-01
  • 2011-03-08
  • 1970-01-01
  • 2012-05-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多