猿问

Asp.net core Identity 成功登录重定向回登录页面

我有一个问题,asp.net 身份框架在用户成功登录后将用户重定向回登录页面。

这是使用标准的 Asp.net Core Identity。它是 2.1.1 版本。生成剃刀页面的脚手架。不确定这是否重要。

我知道用户已成功登录,因为我收到了日志消息

...Areas.Identity.Pages.Account.LoginModel:信息:用户登录。

但随后它会直接重定向回登录页面。

如果我使用 fiddler,我可以看到请求中有一个 cookie,所以从这个角度来看,这一切看起来都不错。

.AspNetCore.Identity.Application=CfDJ8KJxkuir9ZJIjFLCU2bzm9n6X...

所以我猜是处理身份验证但不接受 cookie 的中间件?

如果我能看到身份验证的实际中间件在做什么,我可能有一个想法,但我找不到。

任何帮助表示赞赏


交互式爱情
浏览 563回答 3
3回答

红糖糍粑

为了让 ASP.NET Core 管道识别用户已登录,UseAuthentication需要在类的Configure方法中调用Startup,如下所示:app.UseAuthentication();app.UseMvc(); // Order here is important (explained below).使用 Cookies 身份验证方案,使用UseAuthentication松散执行以下操作:.AspNetCore.Identity.Application从请求中读取cookie的内容,该内容代表发出请求的用户的身份。用代表所述用户的a填充 的User属性。HttpContextClaimsPrincipal这是对所发生情况的简化解释,但它突出了身份验证中间件执行的重要工作。如果没有身份验证中间件,.AspNetCore.Identity.Application将不会用于对用户进行身份验证,因此不会对用户进行身份验证。在您的情况下,尽管用户已登录(即正在设置 cookie),但管道中间件(例如 MVC)看不到该用户(即未读取 cookie),因此会看到未经身份验证的请求并再次重定向登录。鉴于认证中间件读取cookie,然后填充ClaimsPrincipal,应该清楚的是,UseAuthentication呼叫也必须是之前的UseMvc呼叫为了这个正确的顺序发生。否则,MVC 中间件在身份验证中间件之前运行,并且不会使用填充的ClaimsPrincipal.为什么不添加处理登录的中间件会登录失败?!?中间件不处理登录 - 它处理身份验证过程。用户已登录,这由.AspNetCore.Identity.Applicationcookie的存在确认。这里失败的是读取所述cookie。

烙印99

请注意,该顺序很重要。我将这些颠倒过来并遇到了与原始海报所遇到的完全相同的问题。在我弄明白之前浪费了几个小时......    app.UseAuthentication();     app.UseAuthorization();

慕斯709654

如果你使用 .net core 3(这次是预览版)将您的“app.UseEndpoints”放在 startup.cs 到代码块的末尾。例如它应该按这个顺序        app.UseAuthentication();        app.UseAuthorization();        app.UseEndpoints(endpoints =>        {            endpoints.MapControllerRoute(                name: "default",                pattern: "{controller=Home}/{action=Index}/{id?}");            endpoints.MapRazorPages();        });
随时随地看视频慕课网APP
我要回答