WebSecurity.GeneratePasswordResetToken返回错误(但用户存在!)

Dav*_*ide 3 authentication asp.net-mvc-4 simplemembership

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

WebSecurity.UserExists(email)
Run Code Online (Sandbox Code Playgroud)

并且它返回true,但是当我exectue

WebSecurity.GeneratePasswordResetToken(email, 10);
Run Code Online (Sandbox Code Playgroud)

我收到了这个错误

No account exists for *email*
Run Code Online (Sandbox Code Playgroud)

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

有任何想法吗?

Dav*_*ide 6

在[webpages_Membership]表格中以某种方式解决了它没有出现对用户的确认.


eke*_*man 5

如果用户没有得到确认,也会抛出同样的错误。我花了一段时间才找出来,所以这可能会对某人有所帮助。也许有人有更好的方法来做这件事,因为这有点 hacky。

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

 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;
    }
Run Code Online (Sandbox Code Playgroud)


小智 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);
        }
Run Code Online (Sandbox Code Playgroud)