2014-10-22 86 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