2014-10-22 82 views
2

在我的MVC應用程序中,用戶註冊有兩種方式實現;用戶註冊並由管理員批准;或者管理員可以創建一個用戶。我的問題是:是否可以發送臨時密碼,然後用戶必須在第一次登錄後更改它,或者我可以標記此用戶是否第一次使用外部認證。 我將不勝感激您的建議。Asp.net身份識別2.0臨時密碼

回答

2

可以定義一個UserAccount類是這樣的:

public class UserAccount 
{ 
    public int AccountId { get; set;} 

    public UserAccountState AccountState { get; set; } 

    public Guid ActivationCode { get; set; } 

    public string Password { get; set; } 
} 

哪裏UserAccountState是

public enum UserAccountState 
{ 
    PendingActivation = 0, 
    UsingTempPassword = 1 
    Normal = 2 
} 

當新用戶剛剛簽署了。你可以把他的賬戶到PendingActivation狀態,並送他一個鏈接激活帳戶,像這樣

www.MySite.com/Activate?code=F3D17EE 

當用戶點擊鏈接時,你匹配的代碼的用戶帳戶,並執行以下操作:

  1. 生成該帳戶的臨時密碼,例如「TempPass12」
  2. 更改賬戶狀態UsingTempPassword
  3. 顯示以下信息,以用戶 「您的帳戶現在ACTIV ated。點擊這裏與您的臨時密碼TempPass12

用戶登錄到您的站點臨時密碼後登錄,您的代碼應該檢測到UserAccountStateUsingTempPassword狀態,並隨後將用戶重定向到更改密碼頁面。

一個新密碼後,由用戶提供的帳戶可以付諸Normal狀態。

+0

只是重定向是不夠的。如果您登錄該用戶,他們將能夠繞過更改密碼錶單。如果您未登錄,他們將無法訪問更改密碼錶單。 – Alireza 2016-01-23 11:13:28

2

在密碼錶中添加一列,如'ForceToChangePassword'。每次用戶登錄時檢查該列,如果它設置爲true,則將用戶重定向到更改密碼頁面。

0

我的意見是使用比使用新列,以及檢查的事情,每次登錄的用戶角色我們思考時不好表演。

創建三個新角色也可能是

  • 創建 - 用戶由管理員創建
  • 註冊 - 他們註冊了的自用戶
  • 批准 - 由管理員

批准你的情況如果用戶註冊他們自己,然後將他們添加到ROLE'已註冊'。如果admin創建的用戶將其添加到ROLE 'Created'。一旦管理員批准或用戶更改密碼第一次登錄,那麼你可以將它們添加到ROlE 'Approved'

然後,您可以處理用戶自行註冊和管理員創建控制器操作,以添加用戶以糾正ROIE。

已經存在一個名爲'EmailConfirmed'的列,因此您可以將該列用於您的目的。當用戶在首次登錄時批准或成功更改密碼時更新該列。

正如您所知密碼字段爲空,以便您不需要插入臨時密碼(但您可以如果需要)。您可以將密碼字段保留爲空,並在用戶首次登錄時更新它。您需要更改視圖以支持此方案。

您可以使用asp.net標識框架支持的方法來實現此目的。

GenerateEmailConfirmationTokenAsync 
GenerateEmailConfirmationToken 
IsEmailConfirmedAsync 
ConfirmEmailAsync 

這基於角色的情況下可以幫助你進行分類取決於有角色的用戶和使用容易限制[Authorize(Role = "RoleName")]訪問。

讓我知道你是否需要更多的細節。

希望這會有所幫助。

+2

登錄是比較少見的情況。我不會考慮任何性能命中與一個額外的列顯着。無論如何,系統在登錄時都會爲你提供'ApplicationUser'對象。再多一欄也不會有什麼區別。而試圖重新定位用戶狀態的角色是一個糟糕的表演。如果需要實際的角色,比如「顧問」和「管理員」,那麼混合「已批准」就是破壞SRP。 – trailmax 2014-10-22 09:23:30