NET*_*rts 6 c# asp.net-mvc membership-provider
我只是想请求帮助以使我的方案工作?我想使用PasswordResetToken获取UserName.
这是我的情景.
当用户单击链接时.我将只查询请求["token"]以获取用户名,然后将允许用户更改密码和自动登录.
这是我的代码如下:
public ActionResult ChangePassword()
{
    ChangePasswordModel model = new ChangePasswordModel();
    string token=string.Empty;
    try
    {
        token = Request["token"].ToString();
        int userId = WebSecurity.GetUserIdFromPasswordResetToken(token);
        if (userId > 0)
        {
           //Get the user object by (userid) 
           //???????????????????
           //???????????????????
        }
        else
        {
            throw new Exception("The change password token has expired. Please go to login page and click forgot password again.");
        }
    }
    catch
    {
        model.HasError = true;
        ModelState.AddModelError("", "The change password token has expired. Please go to login page and click forgot password again.");
    }
    return View(model);
}
先感谢您.
请看本文末尾的注释:WebSecurity.GeneratePasswordResetToken方法.
为方便起见,我会复制相关部分:
如果用户忘记了密码,他们可以申请新密码.要提供新密码,请执行以下操作:
- 创建一个密码重置页面,其中包含一个用户可以输入其电子邮件地址的字段.
- 当用户在密码重置页面中输入了他或她的电子邮件地址时,请验证该电子邮件地址是否代表有效用户.如果是,则通过调用GeneratePasswordResetToken(String,Int32)方法生成密码重置令牌.
- 创建指向站点中的确认页面的超链接,该超链接将令牌作为查询字符串参数包含在链接的URL中.
- 通过电子邮件将链接发送给用户.当用户收到电子邮件消息时,他或她可以单击该链接以调用确认页面.
- 创建一个确认页面,该页面从URL参数中提取令牌,并允许用户输入新密码.
- 当用户提交新密码时,请调用ResetPassword(String,String)方法并传递密码重置令牌和新密码.如果令牌有效,密码将被重置.如果令牌无效(例如,它已过期),则显示错误消息.
突出显示是我的.基本上你不需要用户名.该框架为您完成了所有繁重的工作.
解决你的评论,我不建议自动登录用户.这是一个很好的做法,他们手动记录检查这个密码更改的东西实际上是否有效,而不是发现它不仅仅是下一次.
无论如何,你可以这样做:
SimpleMembershipProvider provider = (SimpleMembershipProvider)Membership.Provider;
string username = provider.GetUserNameFromId(userId);
| 归档时间: | 
 | 
| 查看次数: | 5670 次 | 
| 最近记录: |