【问题标题】:.Net Core Forgot password not found.Net Core 忘记密码未找到
【发布时间】:2021-09-08 05:43:40
【问题描述】:
我正在关注.Net core Account and password recovery 的教程,但我不确定事情是如何运作的。该教程说要在 startup.cs 中添加电子邮件服务,然后一切才开始工作。我不知道忘记密码页面的位置,而不是其他页面,我检查了隐藏文件和它自己的实际目录(见图),但是我从重置密码链接被重定向到那里。我不知道电子邮件服务是如何被调用的,但我可以设置一个断点并查看它是否被正确的数据击中。我可以看到用于获取用户信息的 sql 查询。此功能是否由核心身份管理?
【问题讨论】:
标签:
c#
asp.net-core
asp.net-identity
【解决方案1】:
我不知道忘记密码的页面在哪里,和其他页面没有关系
您需要在 ASP.NET Core 项目中使用 Scaffold Identity。
- 这意味着您需要通过 Scaffold Identity 添加所需的页面:ForgotPassword、ForgotPasswordConfirmation、ResetPassword、ResetPasswordConfirmation。
- Scaffold Identity in ASP.NET Core projects
我不知道电子邮件服务是如何被调用的,但我可以设置一个断点并查看它是否被正确的数据击中。
此功能是否由核心身份管理?
IEmailSender 位于 ASP.NET Core Identity.UI 包中,默认实现 注入到 不支持的 DI 中什么都不做。
我将在下面详细说明如何发送电子邮件以重置密码。重置密码的过程可以先读到最后。
-
换句话说,你需要实现IEmailSender。
-
在您提供的链接中,已经详细说明如何实现 IEmailSender。
-
在示例中,使用了 SendGrid 电子邮件提供商。您还可以选择其他电子邮件提供商。
- 您需要先注册一个 SendGrid 帐户,然后创建一个 API Key,并将您的 SendGrid 信息存储在 appsettings.json 中。
-
appsettings.json:
-
SendGridUser:
- 这是您在 SendGird 注册的帐户。比如我注册的邮箱是xxx.test.com,SendGridUser是xxx.test.com。
-
SendGridKey:
{
... ...
"AllowedHosts": "*",
"SendGridUser": "xxxx",
"SendGridKey": "xxxxx"
}
-
重置密码的过程可以简单概括如下:
-
点击链接后请求忘记密码页面重置密码
- 输入您的电子邮件地址以重置密码
- 如果您需要重设密码的邮箱地址存在且已确认,则ForgotPassword中的OnPostAsync方法会向您的邮箱地址发送邮件。
- 如果在实现类IEmailSender的EmailSender中的Execute方法设置断点,可以看到邮件发送的结果。
- 您可以打开您的邮箱看到重置您收到的密码的链接,然后输入重置密码并提交表单。
- 表单提交成功后,会请求ResetPassword的OnPostAsync方法,处理会重定向到ResetPasswordConfirmation页面。
-
结果