从发送的电子邮件网络核心身份调用重置密码时不起作用

Posted

技术标签:

【中文标题】从发送的电子邮件网络核心身份调用重置密码时不起作用【英文标题】:Resetting password isn't working when it's called from a sent email net core identity 【发布时间】:2021-11-08 08:13:12 【问题描述】:

在 mvc 应用程序中使用 .net 5 我搭建了 Identity 并且在 ResetPassword 页面中重置密码的代码运行良好,代码如下:

 var code = await _userManager.GeneratePasswordResetTokenAsync(user);
            code = WebEncoders.Base64UrlEncode(Encoding.UTF8.GetBytes(code));
            var callbackUrl = Url.Page(
                "/Account/ResetPassword",
                pageHandler: null,
                values: new  area = "Identity", code ,
                protocol: Request.Scheme);

            await _emailSender.SendEmailAsync(
                Input.Email,
                "Reset Password",
                $"Please reset your password by <a href='htmlEncoder.Default.Encode(callbackUrl)'>clicking here</a>.");

            return RedirectToPage("./ForgotPasswordConfirmation");

但我正在做的是在注册新用户时,应用程序会生成一个自定义的随机密码并将其发送给用户,然后告诉用户单击此处以重置密码。 当点击链接时,它会将用户带到一个几乎空白的页面,只有一句话:“必须实现重置密码的代码”,如下图所示。

这是注册页面的代码:

  var code = await _userManager.GenerateEmailConfirmationTokenAsync(user);
                code = WebEncoders.Base64UrlEncode(Encoding.UTF8.GetBytes(code));
                var callbackUrl = Url.Page(
                    "/Account/ConfirmEmail",
                    pageHandler: null,
                    values: new  area = "Identity", userId = user.Id, code = code, returnUrl = returnUrl ,
                    protocol: Request.Scheme);
                
                var passwordToken = await _userManager.GeneratePasswordResetTokenAsync(user);
                passwordToken = WebEncoders.Base64UrlEncode(Encoding.UTF8.GetBytes(passwordToken));
                var resetPasswordCallbackUrl = Url.Page(
                    "/Account/ResetPassword",
                    pageHandler: null,
                    values: new  area = "Identity", passwordToken ,
                    protocol: Request.Scheme);

                await _emailSender.SendEmailAsync(
                    Input.Email,
                    $"You have been registered in bla bla",
                   $"<p> your password is </p><p>\"Input.Password\"</p>\n to change it please click<a href ='HtmlEncoder.Default.Encode(resetPasswordCallbackUrl)'>here </a>");

                await _emailSender.SendEmailAsync(Input.Email, "please confirm your email",
                    $"please confirm your email by clicking <a href='HtmlEncoder.Default.Encode(callbackUrl)'>here</a>.");

                return LocalRedirect(returnUrl);

电子邮件确认邮件工作正常,但显示重置密码链接 this

我该如何解决这个问题?

【问题讨论】:

【参考方案1】:

尝试将变量名passwordToken改成code

【讨论】:

变量的默认名称似乎是您提到的代码,但我无法命名导致确认电子邮件令牌具有此名称的变量,但我将 code = passwordToken 添加到对象值和它的作用就像一个魅力它变成了这样values: new area = "Identity",code = passwordToken , 很高兴你已经弄明白了!

以上是关于从发送的电子邮件网络核心身份调用重置密码时不起作用的主要内容,如果未能解决你的问题,请参考以下文章

设计忘记密码不起作用

Magento密码重置不起作用

用于发送邮件的 php 脚本在通过浏览器执行时不起作用,但在从命令行执行时工作正常

Laravel 5密码重置不起作用

如何使用 django-rest-auth 和 Mailgun 从 Django 发送密码重置电子邮件

PHP - 密码重置表单不起作用