5

我正在使用 ASP.NET MVC 4 Web 应用程序,我正在尝试制作密码忘记页面。在我的 POST 中,我检查与密码相关的用户是否存在

WebSecurity.UserExists(email)

它返回true,但是当我执行时

WebSecurity.GeneratePasswordResetToken(email, 10);

我收到此错误

No account exists for *email*

作为参考,我正在关注本教程:http ://www.thecodingguys.net/tutorials/asp/webpages-membership-forgot-password-and-reset-password 。

有任何想法吗?

4

3 回答 3

8

解决了,不知何故在 [webpages_Membership] 表中它没有为用户提供确认。

于 2013-01-18T10:11:30.673 回答
5

如果用户没有被确认,也会抛出同样的错误。我花了一段时间才知道,所以这可能会对某人有所帮助。也许有人有更好的方法,因为这有点骇人听闻。

在我的情况下,客户希望通过邮件向用户发送密码(我知道....),如果需要重新发送邮件,则必须生成新密码。

 private string ChangePasswordForNotConfirmedUser(string emailAdress)
    {
        var membership = _membershipRepository.GetByUserName(emailAdress);
        membership.IsConfirmed = true;
        _membershipRepository.Save(membership);
        var token = WebSecurity.GeneratePasswordResetToken(emailAdress);
        var password = Membership.GeneratePassword(GlobalSettings.PasswordLenght, GlobalSettings.PasswordNoAlphaChars);
        WebSecurity.ResetPassword(token, password);
        membership.IsConfirmed = false;
        _membershipRepository.Save(membership);
        return password;
    }
于 2013-07-31T12:24:29.640 回答
5

这为我解决了问题,而无需考虑其他任何事情。

try
        {
            token = WebSecurity.GeneratePasswordResetToken(username);
        }
        catch (Exception ex)
        {
            if (ex.Message.Contains("No account"))
            { 
                string password = System.Web.Security.Membership.GeneratePassword(6, 0);
                WebSecurity.CreateAccount(username, password);

            }
            token = WebSecurity.GeneratePasswordResetToken(username);
        }
于 2014-02-22T14:53:19.660 回答