我正在使用winforms项目使用aspnet.Identity。我通过传递的用户名to usermanager.findbynameasync成功地找到了用户,但是我无法登录以使用传递的密码。我可以使用相同的数据库和相同的凭据在我的MVC应用中登录正常。
这是我的代码:
public async Task<List<string>> VerifyUserNamePassword(string userName, string password)
{
var usermanager = new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(new IdentityFrameworkDbContext()));
var user = await usermanager.FindAsync(userName, password);
//This is ALWAYS NULL!
if (user != null)
label1.Text = "Success!";
var u = await usermanager.FindByEmailAsync(userName);
if (u != null)
{
//This works up to this point - check if password is correct
var success = await usermanager.CheckPasswordAsync(u, password);
//THIS IS ALWAYS FALSE!
if (success)
label1.Text = "YES THIS WORKED!";
}
//This works, I get the Roles back and they are correct
var users = await usermanager.GetRolesAsync(u.Id);
return users.ToList();
}
密码哈希取决于app.config或web.config中的这些设置。
<system.web>
<machineKey decryption="" decryptionKey="" validation="" validationKey="" />
</system.web>
如果他们不存在框架计算机中的设置。如果您希望多个应用程序或部署使用相同的数据库,则必须在这些部署中提供相同的值。
查看您已经有一个运行的APS.NET实例,您应该将值从web.config
复制到Windows表单的app.config
或Web Server上的Machine.config。