.net core JWT验证,HttpContext.User为空的问题

这几天在学习张老师.net core教程JWT部分,链接 https://mp.weixin.qq.com/s/7135y3MkUlPIp-flfwscig

教程使用的.net core 2.2, 在抄代码的时候,我创建的.net core 3.1,所以startup.cs 的Conifg中,app.UseMvc();不再适用,所以我进行了一些修改,参考链接   https://www.cnblogs.com/tianma3798/p/11909293.html

原代码

        public void Configure(IApplicationBuilder app, IHostingEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }


            //app.UseMiddleware<JwtTokenAuth>();

            app.UseAuthentication();

            app.UseMvc();
        }

修改后

 public void Configure(IApplicationBuilder app, IHostingEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }


            app.UseRouting();

            
            app.UseAuthorization();

            app.UseEndpoints(endpoints => {

            endpoints.MapControllerRoute(

            name: "default",

            pattern: "{controller}/{action=Index}/{id?}");

                 });

            //app.UseMiddleware<JwtTokenAuth>();

            app.UseAuthentication();

            //app.UseMvc();
        }

然而 Controller中 _accessor.HttpContext.User  和User一直未null,困扰了我好久,也找了很多方法都没解决。

最后找到了这个https://blog.csdn.net/laidanchao/article/details/111179462,说了app.UserAuthtication的顺序问题,试了下果然解决了问题,但也不全对,回到教程,张老师其实有提到

注意1:HTTP管道是有先后顺序的,一定要写在 app.Mvc() 之前,否则不起作用。

 

然而因为升级到3.1,我把这行注释了,而且没有注意到UserAuthtication的顺序,导致认证失败,最后是吧UserAuthtication放在UseEndpoints前面得以解决问题。

posted @ 2021-07-27 10:17  Bert_Hu  阅读(1369)  评论(0)    收藏  举报