在我的MVC应用程序中,用户注册以两种方式实现;用户注册然后由管理员批准;或管理员可以创建用户。我的问题是:是否可以发送临时密码然后用户必须在首次登录后更改它,或者我可以标记该用户第一次使用外部身份验证。 我很感激你的建议。
答案 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
当用户点击链接时,您将用户帐户与代码匹配,并执行以下操作:
UsingTempPassword
用户使用临时密码登录您的站点后,您的代码应检测到UserAccountState
处于UsingTempPassword
状态,然后将用户重定向到更改密码页。
用户提供新密码后,帐户可以进入Normal
状态。
答案 2 :(得分:0)
我的意见是使用角色而不是使用新列,并在每次用户登录时检查事物,因为当我们考虑性能时这不好。
创建三个新角色
如果用户自行注册,则将其添加到ROLE'已注册'。如果用户创建的用户将其添加到ROLE 'Created'
。管理员批准或用户首次登录密码后,您可以将其添加到RO 'Approved'
。
然后,您可以处理用户自行注册和管理员创建控制器操作,以添加用户以更正ROlE。
已经有一个名为'EmailConfirmed'
的列,因此您可以将该列用于您的目的。当用户批准或在首次登录时成功更改密码时更新该列。
如您所知,密码字段可以为空,因此您不需要插入临时密码(但如果您愿意,也可以)。您可以将密码字段保留为null,并在用户首次登录时更新它。您需要更改视图以支持此方案。
您可以使用asp.net身份框架支持的方法来实现此目的。
GenerateEmailConfirmationTokenAsync
GenerateEmailConfirmationToken
IsEmailConfirmedAsync
ConfirmEmailAsync
此基于角色的方案可以帮助您根据角色对用户进行分类,并使用[Authorize(Role = "RoleName")]
轻松限制访问。
如果您需要更多详细信息,请与我们联系。
希望这有帮助。