在 ASP.NET 6 Web App 中添加授权策略会破坏 default/scaffolded Identity returnurl
Adding Authorization Policy breaks default/scaffolded Identity returnurl in ASP.NET 6 Web App
在我的 ASP.NET 6 Web 应用程序 Program.cs.
中添加授权策略后,我遇到了返回 url 格式不正确的问题
重现问题的步骤:
- 使用个人帐户创建 ASP.NET 6 个 Web 应用程序。
- 创建 SQL 服务器数据库并更新 appsettings.json 中的连接字符串。
- 更新数据库以创建默认的 ASP.NET 身份表。
- 使用默认的 ApplicationDbContext 和 IdentityUser 搭建所有身份页面。
此时一切正常。我可以注册一个新用户并登录。
- 将授权策略添加到 program.cs 以要求用户登录才能访问该应用程序。
builder.Services.AddAuthorization(options => {
options.FallbackPolicy = new AuthorizationPolicyBuilder()
.RequireAuthenticatedUser()
.Build();
});
此时启动应用程序会被带到一个损坏的 URL:
(在 MS Edge 上)
嗯……无法访问此页面
它看起来像在 https://localhost:7094/Identity/Account/Login?ReturnUrl=%2FIdentity%2FAccount%2FLogin%3FReturnUrl%3D%252FIdentity%252FAccount%252FLogin%253FReturnUrl%253D%25252FIdentity 的网页...... .etc
url 无休止地重复,每次循环时都会添加更多“%25F”。
将 [AllowAnonymous] 添加到登录和注册页面允许我访问它们,但我仍然无法真正成功地注册新用户。注册后,点击 'Normally this would be emailed: Click here to confirm your account' link 将我带到一个同样损坏的 URL:
https://localhost:7094/Identity/Account/Login?ReturnUrl=%2FIdentity%2FAccount%2FConfirmEmail%3FuserId%3Def48b287-bac4-4b21-afbc-f060e1ba859d%26code%3DQ2ZESjhBS2tOazZqZ1IxSWl3NVdudEJhSUhLckxsY2NMZytON1JSaVlPYkRLOE50ako2THFWOXRIZ2UzVFB4VmxFZ0JUYWQ0djg2TXNLcVpyS3c2VndEcUtNdG5DdkNBdzhnak95TUQ4U25nSTltU2cvRzNzMUt5ZHgvNGd6WjhFdnlYUy85RmMzU2g0VHY3WURhOHl0TVJPay8wbGI1b0JFV3hWcEZNYkQ1S2Q5U1VuNEh6ZlZkOEIrOWFEdGxYQVBWR2hIZjVnaENLditwSjJaWUoyMHNWOHp3VzVIanJ4cnh0NEEwUTNHdjZNNlEyRC9ZdUVORmZZOXM3NVZjeWtvcHIrUT09%26returnUrl%3D%252FIdentity% 252FAccount%252F注销
这导致数据库中的 EmailConfirmed 列未设置为 True,我无法以创建的用户身份登录。
有谁知道是什么导致 url 以这种方式格式化?上面的Authorization代码是我自己加到项目中的唯一代码,其他都是default/scaffolded.
这对我有帮助。
我把 [AllowAnonymous] 装饰放在:
- AccessDenied.cshtml.cs
- ForgotPasswordModel.cshtml.cs
- ForgotPasswordConfirmation.cshtlm.cs
- Login.cshtml.cs
- Error.cshtml.cs
我认为如果你也添加它,它会对你有用 ConfirmEmailModel.cshtml.cs
我不需要注册页或 2fa 页。
目前看来,如果有人知道更好的解决方案,我会很高兴听到它。
在我的 ASP.NET 6 Web 应用程序 Program.cs.
中添加授权策略后,我遇到了返回 url 格式不正确的问题重现问题的步骤:
- 使用个人帐户创建 ASP.NET 6 个 Web 应用程序。
- 创建 SQL 服务器数据库并更新 appsettings.json 中的连接字符串。
- 更新数据库以创建默认的 ASP.NET 身份表。
- 使用默认的 ApplicationDbContext 和 IdentityUser 搭建所有身份页面。
此时一切正常。我可以注册一个新用户并登录。
- 将授权策略添加到 program.cs 以要求用户登录才能访问该应用程序。
builder.Services.AddAuthorization(options => {
options.FallbackPolicy = new AuthorizationPolicyBuilder()
.RequireAuthenticatedUser()
.Build();
});
此时启动应用程序会被带到一个损坏的 URL:
(在 MS Edge 上) 嗯……无法访问此页面 它看起来像在 https://localhost:7094/Identity/Account/Login?ReturnUrl=%2FIdentity%2FAccount%2FLogin%3FReturnUrl%3D%252FIdentity%252FAccount%252FLogin%253FReturnUrl%253D%25252FIdentity 的网页...... .etc
url 无休止地重复,每次循环时都会添加更多“%25F”。
将 [AllowAnonymous] 添加到登录和注册页面允许我访问它们,但我仍然无法真正成功地注册新用户。注册后,点击 'Normally this would be emailed: Click here to confirm your account' link 将我带到一个同样损坏的 URL:
https://localhost:7094/Identity/Account/Login?ReturnUrl=%2FIdentity%2FAccount%2FConfirmEmail%3FuserId%3Def48b287-bac4-4b21-afbc-f060e1ba859d%26code%3DQ2ZESjhBS2tOazZqZ1IxSWl3NVdudEJhSUhLckxsY2NMZytON1JSaVlPYkRLOE50ako2THFWOXRIZ2UzVFB4VmxFZ0JUYWQ0djg2TXNLcVpyS3c2VndEcUtNdG5DdkNBdzhnak95TUQ4U25nSTltU2cvRzNzMUt5ZHgvNGd6WjhFdnlYUy85RmMzU2g0VHY3WURhOHl0TVJPay8wbGI1b0JFV3hWcEZNYkQ1S2Q5U1VuNEh6ZlZkOEIrOWFEdGxYQVBWR2hIZjVnaENLditwSjJaWUoyMHNWOHp3VzVIanJ4cnh0NEEwUTNHdjZNNlEyRC9ZdUVORmZZOXM3NVZjeWtvcHIrUT09%26returnUrl%3D%252FIdentity% 252FAccount%252F注销
这导致数据库中的 EmailConfirmed 列未设置为 True,我无法以创建的用户身份登录。
有谁知道是什么导致 url 以这种方式格式化?上面的Authorization代码是我自己加到项目中的唯一代码,其他都是default/scaffolded.
这对我有帮助。
我把 [AllowAnonymous] 装饰放在:
- AccessDenied.cshtml.cs
- ForgotPasswordModel.cshtml.cs
- ForgotPasswordConfirmation.cshtlm.cs
- Login.cshtml.cs
- Error.cshtml.cs
我认为如果你也添加它,它会对你有用 ConfirmEmailModel.cshtml.cs
我不需要注册页或 2fa 页。 目前看来,如果有人知道更好的解决方案,我会很高兴听到它。