当前位置: 首页 > 知识库问答 >
问题:

身份密码重置令牌无效

澹台景山
2023-03-14

我写的是MVC5,使用的是Identity 2.0。

    public class AccountController : Controller
{
    public UserManager<ApplicationUser> UserManager { get; private set; }

    public AccountController()
        : this(new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(new ApplicationDbContext())))
    {
    }
        public AccountController(UserManager<ApplicationUser> userManager)
    {   
        //usermanager config
        userManager.PasswordValidator = new PasswordValidator { RequiredLength = 5 };  
        userManager.EmailService = new IddaaWebSite.Controllers.MemberShip.MemberShipComponents.EmailService(); 

        var provider = new Microsoft.Owin.Security.DataProtection.DpapiDataProtectionProvider();
        userManager.UserTokenProvider = new Microsoft.AspNet.Identity.Owin.DataProtectorTokenProvider<ApplicationUser>(provider.Create("UserToken"))
                                                    as IUserTokenProvider<ApplicationUser, string>;




        UserManager = userManager;

    }
 [HttpPost]
    [ValidateAntiForgeryToken]
    public async Task<ActionResult> ManagePassword(ManageUserViewModel model)
    {
        if (Request.Form["email"] != null)
        {
          var email = Request.Form["email"].ToString();
          var user = UserManager.FindByEmail(email);
          var token = await UserManager.GeneratePasswordResetTokenAsync(user.Id);
           //mail send
        }
   }

我在邮件中点击链接,我正在获得密码重置令牌并使用

var result = await UserManager.ResetPasswordAsync(model.UserId, model.PasswordToken, model.NewPassword);

结果总是false,并表示“无效令牌”。我该在哪里修?

共有1个答案

包和泰
2023-03-14

usermanager.generatePasswordResetTokenAsync()经常返回包含“+”字符的字符串。如果通过查询字符串传递参数,这就是原因('+'字符是URL中查询字符串中的空格)。

尝试用“+”字符替换model.passwordToken中的空格字符。

 类似资料:
  • 一些相关问题:Webforms ASP。NET Identity system重置密码 我试图使用身份系统实现密码恢复,但遇到了错误(商店没有实现IUserEmailStore)。下面是我正在做的,我正在使用Visual Studio 2013 Web。使用Web表单(MVC学习进行中),用户注册他们的电子邮件,并存储在数据库的用户名字段中。我在IdentityModel中添加了UserManag

  • 我有两台服务器使用相同的ASP。NET核心标识后端。我使用以下命令生成密码重置令牌: 我通过电子邮件链接发送此令牌。当用户单击链接时,他们会被带到一个单独的站点,该站点应提供一个用户界面来更改密码。以下代码处理用户提交令牌及其新密码的密码: 在第二台服务器上,标识结果总是返回false,因为“无效令牌”。 通过查看源代码,我看到令牌是使用IP地址生成的(因此我理解令牌验证失败的原因)。 我的问题是

  • 我有一个生成密码重置令牌的Webapi服务。 令牌生成服务endpoint:

  • 如何获取新ASP中用户的密码。网络身份识别系统?或者如何在不知道当前密码(用户忘记密码)的情况下重置?

  • 如何覆盖令牌消息“此密码重置令牌无效。” 我尝试将此添加到ResetPasswordController中,但它仍然显示默认的令牌消息。 我需要添加一个URL而不是仅仅改变文本。覆盖“密码重置令牌无效”的错误文本Laravel 我发现实际验证令牌的是$this->broker()->reset()。完全覆盖此方法是否是覆盖令牌消息的唯一方法?

  • 通过复制VS2013模板中的代码,我在MVC应用程序中实现了ASP.NET标识。基本的东西是工作的,但我不能得到重置密码工作。当我显示“忘记密码”页面时,将生成一封包含令牌的电子邮件。方法返回此标记: