User.Identity基于具有相同令牌的方法调用而不同

本文关键字:方法 调用 令牌 User 于具 Identity | 更新日期: 2023-09-27 18:21:08

在尝试ASP.NET Identity后,我遇到了一些不理解的行为。我在VS 2015中选择了Web API选项,这为您创建了一个AccountController.cs。我添加了自己的控制器,但User.Identity对象出现了问题。当我调用/api/Account/IsAuthenticated时,User.Identity对象不包含令牌的信息。方法如下:

[AllowAnonymous]
[HttpGet]
[Route("IsAuthenticated")]
public bool IsAuthenticated()
{
    return User.Identity.IsAuthenticated;
}

在我的另一个控制器CategoryController.cs中,我有一个侦听/Category/GetAllCategories的方法,它看起来像这样:

[HttpPost]
public ActionResult GetAllCategories()
{
    var userId = User.Identity.GetUserId();
    return Json(Category.GetAllCategories(userId), JsonRequestBehavior.AllowGet);
}

现在奇怪的是,在GetAllCategories中,我的User对象包含来自令牌的正确信息。对于这两种方法,我提出请求的方式是相同的。只有url不同。

var headers = {};
if (token) {
    headers.Authorization = 'Bearer ' + token;
}
function test(){
    $.ajax({
        datatype: "json",
        type: "POST", 
        url: baseurl + "/api/Account/IsAuthenticated", 
        headers: headers})
    .done(function (data) { console.log(data); })
    .fail(function (data) { console.log("fail"); console.log(data); });
}

我的问题:为什么AccountController中的User.Identity为空?

不确定需要什么信息才能得到正确的答案。如果您需要更多信息,请随时询问

User.Identity基于具有相同令牌的方法调用而不同

[AllowAnonymous] 

这导致请求使用匿名。请将其删除,然后重试。

在我的Startup.cs中遇到问题。它看起来是这样的:

public void Configuration(IAppBuilder app)
{
    app.UseCors(Microsoft.Owin.Cors.CorsOptions.AllowAll);
    //ConfigureAuth(app);
    HttpConfiguration config = new HttpConfiguration();
    WebApiConfig.Register(config);
    app.UseWebApi(config);  
    ConfigureAuth(app); 
}

我不得不把ConfigureAuth(app)移到app.UseWebApi(config)上面。仍然不明白为什么这能解决问题。有人能解释为什么这会有所不同吗?