添加授权策略会破坏 ASP.NET 6 Web 应用程序中的默认/支架身份 returnurl

eig*_*cho 8 c# asp.net-identity asp.net-core razor-pages .net-6.0

我遇到一个问题,即在将授权策略添加到 ASP.NET 6 Web App Program.cs 后,returnurl 的格式不正确。

\n

重现问题的步骤:

\n
    \n
  1. 使用个人帐户创建 ASP.NET 6 Web 应用程序。
  2. \n
  3. 创建 SQL Server 数据库并更新 appsettings.json 中的连接字符串。
  4. \n
  5. Update-Database 创建默认的 ASP.NET Identity 表。
  6. \n
  7. 使用默认的 ApplicationDbContext 和 IdentityUser 搭建所有身份页面的支架。
  8. \n
\n

此时一切都按其应有的方式进行。我可以注册新用户并登录。

\n
    \n
  1. 将授权策略添加到program.cs以要求用户登录才能访问该应用程序。
  2. \n
\n
builder.Services.AddAuthorization(options => {\n    options.FallbackPolicy = new AuthorizationPolicyBuilder()\n        .RequireAuthenticatedUser()\n        .Build();\n    });\n
Run Code Online (Sandbox Code Playgroud)\n

此时启动应用程序会导致访问损坏的 URL:

\n

(在 MS Edge 上)\nHmmm\xe2\x80\xa6 无法访问此页面\n看起来网页位于 https://localhost:7094/Identity/Account/Login?ReturnUrl=%2FIdentity%2FAccount%2FLogin% 3FReturnUrl%3D%252FIdentity%252FAccount%252FLogin%253FReturnUrl%253D%25252FIdentity.......等

\n

该 url 无休止地重复,每次循环时都会添加更多“%25F”。

\n

将 [AllowAnonymous] 添加到登录和注册页面允许我访问它们,但我仍然无法真正成功注册新用户。注册后,单击“通常会通过电子邮件发送此信息:单击此处确认您的帐户”链接会将我带到一个类似的损坏的 URL:

\n

https://localhost:7094/Identity/Account/Login?ReturnUrl=%2FIdentity%2FAccount%2FConfirmEmail%3FuserId%3Def48b287-bac4-4b21-afbc-f060e1ba859d%26code%3DQ2ZESjhBS2tOazZqZ1IxSWl3NVdudEJhSUhLckxsY2NMZ yton1JSaVlPYkRLOE50ako2THFWOXRIZ2UzVFB4VmxFZ0JUYWQ0djg2TXNLcVpyS3c2VndEcUtNDG5DdkNBdzhnak95TUQ4U25nSTltU2cvRzNzMUt5ZHgvNGd6WjhFdnlyYUy85RmMzU2g0VHY3WUR hOHl0TVJPay8wbGI1b0JFV3hWcEZNYkQ1S2Q5U1VuNEh6ZlZkOEIROWFEdGxYQVBWR2hIZjVnaENLditwSjJaWUoyMHNWOHp3VzVIanJ4cnh0NEEwUTNHdjZNNlEyRC9ZdUVORmZZOXM3NVZjeWtvcHIrUT09%26re转Url%3D%252Fidentity%252FAccount%252FLogout

\n

这会导致数据库中的 EmailConfirmed 列未设置为 True,并且我无法以创建的用户身份登录。

\n

有谁知道什么会导致 url 以这种方式格式化?上面的授权代码是我自己添加到项目中的唯一代码,其他所有代码都是默认/脚手架。

\n

Pre*_*2te 10

这对我有帮助。

https://andrewlock.net/setting-global-authorization-policies-using-the-defaultpolicy-and-the-fallbackpolicy-in-aspnet-core-3/

我将 [AllowAnonymous] 装饰放在:

  • AccessDenied.cshtml.cs
  • 忘记密码模型.cshtml.cs
  • 忘记密码确认.cshtlm.cs
  • 登录.cshtml.cs
  • 错误.cshtml.cs

我认为如果您也将其添加到ConfirmEmailModel.cshtml.cs,它会对您有用

我不需要注册页面或 2fa 页面。目前看来,如果有人知道更好的解决方案,我会很高兴听到它。