【发布时间】:2015-07-26 09:01:49
【问题描述】:
我已经实现了一个自定义的UserStore,它实现了IUserStore<DatabaseLogin, int> 和IUserPasswordStore<DatabaseLogin, int>。
我的登录操作方法如下:
if (ModelState.IsValid)
{
if (Authentication.Login(user.Username, user.Password))
{
DatabaseLogin x = await UserManager.FindAsync(user.Username, user.Password);
DatabaseLogin Login = Authentication.FindByName(user.Username);
if (Login != null)
{
ClaimsIdentity ident = await UserManager.CreateIdentityAsync(Login,
DefaultAuthenticationTypes.ApplicationCookie);
AuthManager.SignOut();
AuthManager.SignIn(new AuthenticationProperties
{
IsPersistent = false
}, ident);
return RedirectToAction("Index", "Home");
}
}
else
{
ModelState.AddModelError("", "Invalid Login");
}
}
return View();
在我编写的自定义身份验证类Authentication 中,我有一个运行良好的登录方法,FindByName 方法也返回一个应用用户。但是,如果我尝试使用该登录名SignIn,则不会将用户识别为已通过身份验证,并且HttpContext.User.Identity 始终为空,所以我想我必须尝试UserManager.FindAsync。
这个方法调用FindByNameAsync和GetPasswordHashAsync,总是返回null。
public Task<DatabaseLogin> FindByNameAsync(string userName)
{
if (string.IsNullOrEmpty(userName))
throw new ArgumentNullException("userName");
return Task.FromResult<DatabaseLogin>(Authentication.FindByName(userName));
}
public Task<string> GetPasswordHashAsync(DatabaseLogin user)
{
if (user == null)
throw new ArgumentNullException("user");
return Task.FromResult<string>(user.Password);
}
还有Authentication.FindByName
public static DatabaseLogin FindByName(string name)
{
string GetUserQuery = string.Format(
"USE db;SELECT principal_id AS id, name as userName, create_date AS CreateDate, modify_date AS modifyDate FROM sys.database_principals WHERE type='S' AND authentication_type = 1 AND name = '{0}'"
, name);
DatabaseLogin user;
using (var db = new EFDbContext())
{
user = db.Database.SqlQuery<DatabaseLogin>(GetUserQuery).FirstOrDefault();
}
user.Password = Convert.ToBase64String(Encoding.ASCII.GetBytes("pass"));
return user;
}
如您所见,我正在使用数据库用户,我不确定如何为他们检索散列密码。目前,我只是存储正确密码的 Base65!
我不知道我哪里出错了,欢迎任何指导。
【问题讨论】:
-
您能否将您的答案从您的问题中转移到正确的 SO 答案中?你可以自己回答。 :)
标签: c# .net asp.net-mvc asp.net-identity-2