Say*_*Pal 12 c# asp.net authentication asp.net-mvc asp.net-identity-2
我在ASP.NET身份方面相对较新.为了更好地理解这些事情,我正在进行ASP.NET身份的自定义实现.我能够使用自定义代码成功创建用户.但是FindAsync(username, password)
功能不起作用.
这是我到目前为止所做的:
用户:这是我的User
继承自的类IUser<int>
public class User:IUser<int>
{
public User(){ Id = 0; }
public int Id { get; private set; }
public string UserName { get; set; }
public string PasswordHash { get; set; }
public string SecurityStamp { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
UserStore:这是自定义实现的IUserStore' and 'IUserPasswordStore
public class UserStore : IUserStore<User, int>, IUserPasswordStore<User, int>
{
private IdentityContext _context;
public UserStore()
{
_context = new IdentityContext();
}
public void Dispose()
{
throw new NotImplementedException();
}
#region IUserStore<T,K> members
public Task CreateAsync(User user)
{
_context.Users.Add(user);
_context.SaveChangesAsync();
return Task.FromResult(true);
}
public Task UpdateAsync(User user)
{
throw new NotImplementedException();
}
public Task DeleteAsync(User user)
{
throw new NotImplementedException();
}
public Task<User> FindByIdAsync(int userId)
{
return _context.Users.FirstOrDefaultAsync(user=>user.Id==userId);
}
public Task<User> FindByNameAsync(string userName)
{
var user = _context.Users.SingleOrDefaultAsync(u => u.UserName.Equals(userName));
return user;
}
#endregion
#region IUserPasswordStore<User,int>
public Task SetPasswordHashAsync(User user, string passwordHash)
{
user.PasswordHash = passwordHash;
return Task.FromResult(true);
}
public Task<string> GetPasswordHashAsync(User user)
{
return new Task<string>(() => user.PasswordHash);
}
public Task<bool> HasPasswordAsync(User user)
{
throw new NotImplementedException();
}
#endregion
}
Run Code Online (Sandbox Code Playgroud)
在我的MVC5控制器中,我有以下行尝试通过用户名和密码查找用户:
var user = await UserManager.FindAsync("User1355436", "passw0rd");
Run Code Online (Sandbox Code Playgroud)
上面的代码行依次调用以下方法UserStore
:
public Task<User> FindByNameAsync(string userName)
和
public Task<string> GetPasswordHashAsync(User user)
.
之后,代码永久地进入等待状态,没有任何反应,即控件永远不会再次返回控制器.
我在这里缺少什么?
Ant*_*Chu 11
这行代码很可能出现问题......
return new Task<string>(() => user.PasswordHash);
Run Code Online (Sandbox Code Playgroud)
...这会创建一个永不启动的任务,因此等待其继续的代码将永远等待.要返回包含在任务中的值,请使用Task.FromResult()
...
return Task.FromResult(user.PasswordHash);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
8392 次 |
最近记录: |