Asp.net Identity 2.0临时密码

时间:2014-10-22 05:22:31

标签: c# asp.net asp.net-mvc asp.net-identity

在我的MVC应用程序中,用户注册以两种方式实现;用户注册然后由管理员批准;或管理员可以创建用户。我的问题是:是否可以发送临时密码然后用户必须在首次登录后更改它,或者我可以标记该用户第一次使用外部身份验证。 我很感激你的建议。

3 个答案:

答案 0 :(得分:2)

在密码表中添加一个列,例如'ForceToChangePassword'。每次用户登录时检查该列,如果设置为true,则将用户重定向到更改密码页。

答案 1 :(得分: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. 向用户显示以下消息 “您的帐户现已激活。点击此处使用您的临时密码登录 TempPass12
  4. 用户使用临时密码登录您的站点后,您的代码应检测到UserAccountState处于UsingTempPassword状态,然后将用户重定向到更改密码页。

    用户提供新密码后,帐户可以进入Normal状态。

答案 2 :(得分:0)

我的意见是使用角色而不是使用新列,并在每次用户登录时检查事物,因为当我们考虑性能时这不好。

创建三个新角色

  • 已创建 - 由admin
  • 创建的用户
  • 已注册 - 由他们自己注册的用户
  • 已批准 - 由管理员批准

如果用户自行注册,则将其添加到ROLE'已注册'。如果用户创建的用户将其添加到ROLE 'Created'。管理员批准或用户首次登录密码后,您可以将其添加到RO 'Approved'

然后,您可以处理用户自行注册和管理员创建控制器操作,以添加用户以更正ROlE。

已经有一个名为'EmailConfirmed'的列,因此您可以将该列用于您的目的。当用户批准或在首次登录时成功更改密码时更新该列。

如您所知,密码字段可以为空,因此您不需要插入临时密码(但如果您愿意,也可以)。您可以将密码字段保留为null,并在用户首次登录时更新它。您需要更改视图以支持此方案。

您可以使用asp.net身份框架支持的方法来实现此目的。

GenerateEmailConfirmationTokenAsync
GenerateEmailConfirmationToken
IsEmailConfirmedAsync
ConfirmEmailAsync

此基于角色的方案可以帮助您根据角色对用户进行分类,并使用[Authorize(Role = "RoleName")]轻松限制访问。

如果您需要更多详细信息,请与我们联系。

希望这有帮助。