2017-03-17 212 views
0

上的ASP.NET 1.1的核心應用與ASP.NET身份創建用戶我創建了一個用戶:沒有的UserManager在Asp.Net核心身份

PasswordHasher<User> hasher = new PasswordHasher<User>(); 

User user = new User { 
    Email = "[email protected]", 
    Username = "[email protected] 
}; 

user.PasswordHash = hasher.HashPassword(user, "johnpass"); 

context.Users.Add(user); 
context.SaveChanges(); 

創建用戶,但是當我嘗試使用簽名以下它失敗:

SignInResult result = await _signInManager.PasswordSignInAsync("[email protected]", "johnpass", false, true);  

然後我試着用的UserManager創建用戶:

PasswordHasher<User> hasher = new PasswordHasher<User>(); 

User user = new User { 
    Email = "[email protected]", 
    Username = "[email protected] 
}; 

await userManager.CreateAsync(user, "johnpass"); 

現在我能登錄。看起來問題是使用HashPassword方法。

有沒有人知道如何在沒有UserManager的情況下創建用戶?

UPDATE
我嘗試沒有暈暈的注入,因爲我創建一個控制檯應用程序我的測試數據,而不是在Web應用程序創建的UserManager:

var userStore = new UserStore(Context); 

var userManager = new UserManager<User>(userStore, null, null, null, null, null, null, null, null); 

創建的用戶,但我我仍然無法登錄。

+0

這不僅僅是密碼散列,還包括安全印章。 – DavidG

+0

安全印章?你能給我一個例子如何解決它? –

+1

那麼你已經得到了答案:使用'UserManager' – DavidG

回答

0

請按照以下方案進行登錄。

  1. 使用的用戶名或電子郵件獲得用戶。
    user = context.Users.FirstOrDefault(usr => usr.UserName == userName);

  2. 檢查該用戶是否有這個密碼或不使用: userManager.CheckPasswordAsync(user, password);

其中的UserManager是UserManager<User>

1

一個對象,你必須做以下事情:

userManager.UpdateSecurityStampAsync(domainUser); 
     domainUser.NormalizedUserName = domainUser.NormalizedEmail = domainUser.UserName = domainUser.Email; 
     await userManager.UpdateNormalizedUserNameAsync(domainUser); 
     await userManager.UpdateNormalizedEmailAsync(domainUser); 
     await userManager.UpdateAsync(domainUser); 

如果您在您的配置電子郵件中設置確認

var token = await userManager.GenerateEmailConfirmationTokenAsync(domainUser); 
await userManager.ConfirmEmailAsync(domainUser, token); 
相關問題