Identity.IsAuthenticated 在 ASP.Net Web API 中返回 false

Posted

技术标签:

【中文标题】Identity.IsAuthenticated 在 ASP.Net Web API 中返回 false【英文标题】:Identity.IsAuthenticated return false in an ASP.Net Web API 【发布时间】:2019-09-06 14:20:45 【问题描述】:

登录成功后,返回值始终为false。我正在使用Microsoft.Identity(“个人用户帐户”选项)提供的默认身份验证系统,没有进行任何修改。有什么想法吗?

        [HttpGet]
        [Route("get-userId")]
        public bool CurrentUserId()
        
            return User.Identity.IsAuthenticated;
        

客户端代码:

登录.html

        $(document).ready(function () 

            $('#btnLogin').click(function () 
                $.ajax(

                    url: '/token',
                    method: 'POST',
                    contentType: 'application/json',
                    data: 
                        username: $('#txtUsername').val(),
                        password: $('#txtPassword').val(),
                        grant_type: 'password'
                    ,
                    success: function (response) 
                        sessionStorage.setItem("accessToken", response.access_token);
                        window.location.href = "Momo.html";
                    ,

                    error: function (jqXHR) 
                        $('#divErrorText').text(jqXHR.responseText);
                        $('#divError').show('fade');
                    
                );
            );
        );

陌陌.html:

    $(document).ready(function () 
                if (sessionStorage.getItem('accessToken') == null) 
                    window.location.href = "Login.html";
                

                $.ajax(
                    url: '/api/Account/get-userId',
                    method: 'GET',
                    success: function (response) 
                        console.log(response);
                    
                );

console.log(response) 返回false

【问题讨论】:

【参考方案1】:

您需要在每个请求中将令牌发送到服务器。将以下内容添加到您的 Ajax 调用中:

headers:  "Authorization": 'Bearer ' + token 

你可以这样重写你的代码:

      $(document).ready(function () 
            var token = sessionStorage.getItem('accessToken');
            if (token == null) 
                window.location.href = "Login.html";
            

            $.ajax(
                url: '/api/Account/get-userId',
                method: 'GET',
                headers:  "Authorization": 'Bearer ' + token ,
                success: function (response) 
                    console.log(response);
                
            );

【讨论】:

以上是关于Identity.IsAuthenticated 在 ASP.Net Web API 中返回 false的主要内容,如果未能解决你的问题,请参考以下文章

Identity.IsAuthenticated 在 ASP.Net Web API 中返回 false

profile.User.Identity.IsAuthenticated 返回 false 没有人帮助我

使用 AuthenticationStateProvider 注销用户并使用 Blazor 将 User.Identity.IsAuthenticated 设置为 false

Jwt Bearer Authentication 中间件始终将 User.Identity.IsAuthenticated 设置为 false

ASP.NET 如何在应用程序请求模块中访问 User.Identity.IsAuthenticated?

如果在 User.Identity.IsAuthenticated 为 false 时提供两个条件,GetUser(string userName, bool isOnline) 是不是仍返回 nul