我想要仅使用用户名和密码对用户进行身份验证。我的应用程序没有任何用户管理数据,我只想创建具有用户详细信息的Identity,以便我可以在应用程序中使用它。
我试图复制SingInAsync方法来解决这个问题
private async Task InitializeUser()
{
var user = new ApplicationUser();
user.Id = "abcd";
user.UserName = "abcd";
AuthenticationManager.SignOut(DefaultAuthenticationTypes.ExternalCookie);
var identity = await UserManager.CreateIdentityAsync(user, DefaultAuthenticationTypes.ApplicationCookie);
AuthenticationManager.SignIn(new AuthenticationProperties() { IsPersistent = false }, identity);
}
但它告诉我并且错误 - 无法找到用户ID 。有没有我可以通过用户名验证用户并为身份分配一些细节?
答案 0 :(得分:1)
没有用户忘记UserManager并自己创建ClaimsIdentity
。
private async Task InitializeUser()
{
var user = new ApplicationUser();
user.Id = "abcd";
user.UserName = "abcd";
AuthenticationManager.SignOut(DefaultAuthenticationTypes.ApplicationCookie);
var id = new ClaimsIdentity(DefaultAuthenticationTypes.ApplicationCookie, ClaimsIdentity.DefaultNameClaimType, ClaimsIdentity.DefaultRoleClaimType);
id.AddClaim(new Claim("http://schemas.microsoft.com/accesscontrolservice/2010/07/claims/identityprovider", "ASP.NET Identity", ClaimValueTypes.String));
id.AddClaim(new Claim(ClaimsIdentity.DefaultNameClaimType, user.UserName, ClaimValueTypes.String));
id.AddClaim(new Claim(ClaimTypes.NameIdentifier, user.Id, ClaimValueTypes.String));
AuthenticationManager.SignIn(new AuthenticationProperties() { IsPersistent = false }, id);
}
您可能想稍微调整一下以使其更清洁。