angularjs - User.Identity.GetUserId() 和 RequestContext.Principal.Identity.GetUserId() 在 WEB API Controller 中返回 NULL。使用基于 token 的身份验证

标签 angularjs asp.net-web-api http-token-authentication

我使用 token 来保护我的 Web API 网站,并从 AngularJS 客户端应用程序使用此 API。

这样我就可以使用基于 token 的身份验证进行登录。我的问题是我无法在 Web API Controller 中获取 UserId

User.Identity.GetUserId()RequestContext.Principal.Identity.GetUserId() 均返回 null

如何在ApiController中获取UserId

最佳答案

如果您已有不记名 token ,请在 JavaScript 中设置授权 header 。

var token = sessionStorage.getItem(tokenKey);
var headers = {};
if (token) {
    headers.Authorization = 'Bearer ' + token;
}

那么您应该在 ajax 请求中包含 header :

 $.ajax({
        type: 'GET',
        url: 'api/values/1',
        headers: headers
    }).done(function (data) {
        self.result(data);
    }).fail(showError);

最后在你的 Controller 中你可以通过以下方式获取用户ID:

var userId = RequestContext.Principal.Identity.GetUserId();

更多信息请参阅Secure a Web API with Individual Accounts and Local Login in ASP.NET Web API 2.2

关于angularjs - User.Identity.GetUserId() 和 RequestContext.Principal.Identity.GetUserId() 在 WEB API Controller 中返回 NULL。使用基于 token 的身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38299526/

相关文章:

c# - Web API 中基于 token 的身份验证,无需任何用户界面

javascript - 使用基于两个对象数组的 AngularJS 显示复选框

angularjs - Angular-ui-router state.transitionTo 路由到一个空的 :id (/users//)

ruby-on-rails - 如何处理仅供其他第三方应用程序访问的 Web 应用程序的 HTTP 身份验证?

javascript - 带有 AngularJS CORS 的 IE9、IE8 返回 “Access is denied” - ASP.NET WebApi

visual-studio - nuget 找不到资源 'productupdate/productupdatebar.xaml'

authentication - 实现 token 认证

angularjs - 在回调事件中触发摘要循环

javascript - Angular ng-options 选择未设置为初始值

c# - VS Enterprise 负载测试发起 IP 地址