2016-01-15 53 views
2

我有一個ASP.NET身份的問題。在我的應用程序,我想用戶只要有人增加了將它們添加到表dbo.AspNetUsers,一項民意調查與他們的郵件ADRESS,像這樣:ASP.NET身份,註冊手動添加用戶而不刪除他

var user = new ApplicationUser 
      { 
       UserName = model.Email, 
       Email = model.Email, 
       TwoFactorEnabled = false, 
       EmailConfirmed = false, 
       Registered = true 
      }; 
_dbContext.ApplicationUsers.Add(user); 
_dbContext.SaveChanges(); 

如果誰加入這樣對數據庫的人早些時候,想要向自己的mailadress註冊自己,我不想刪除手動添加的用戶並將其註冊爲新用戶,因爲其他關係已經與他的ID相關聯,並且約束條件不允許這樣做。我也無法刪除連接的關係,因爲其他用戶也與他們有關。

我試圖在數據庫中像這樣的hashedPassword手動添加到他:

_dbContext.ApplicationUsers.FirstOrDefault(u => u.Email == model.Email).PasswordHash = 
       this.HashPassword(user, model.Password); 
_dbContext.SaveChanges(); 

但隨後登錄中 「System.Security失敗,因爲內部服務器錯誤的,因爲一個NULL值.Claims.Claim ..ctor(String type,String value,String valueType,String issuer,String originalIssuer,ClaimsIdentity subject,String propertyKey,String propertyValue)「。

有人知道一個解決方案來註冊一個用戶,他已經手動添加,而不刪除他嗎?

感謝您的回答!

編輯/解決方案

這裏是解決方案:

在第一個步驟,只需要創建一個默認的密碼的用戶,那麼如果他想註冊,刪除密碼,並添加密碼從RegisterModel,像這樣:

var result = await _userManager.CreateAsync(user, "DefaultPassword1."); 

await _userManager.RemovePasswordAsync(user); 
var result = await _userManager.AddPasswordAsync(user, model.Password); 
+1

您應該真的使用['UserManager']上的方法(https://msdn.microsoft.com/zh-cn/library/dn613059(v = vs108).aspx)添加/刪除/更新ASP.NET身份表中的記錄。 –

回答

2

如果您查看Manage控制器,您將看到所有管理用戶帳戶的方法。例如,要添加您要使用的密碼

var result = await UserManager.AddPasswordAsync(User.Identity.GetUserId(), model.NewPassword); 
+1

如果您手動添加用戶,他們將沒有安全印記,(IIRC)會導致該方法拋出異常。 [這個答案](https://stackoverflow.com/a/29430025/1187982)到另一個問題應該可以幫助你爲用戶生成一個安全印章。 –

+0

謝謝,我會試試你的解決方案。 – davidrue

相關問題