长话短说。我有一个登录表单在每一个页面的头部,当我成功登录它工作正常,但当用户是不正确的,例如,它重定向到默认的登录页面(一个视图,最初是用MVC项目创建的)与模型错误。我不想那样做,我想在登录表单旁边显示错误而不重定向。所以我决定实现一个登录通过WEB API -即它的$.ajax
jQuery请求登录API控制器,尝试登录用户登录和返回错误,如果需要的话,我可以输出他们在我想要的地方。
我看到的所有例子都说使用承载访问令牌。我不明白为什么我需要走这条路-将令牌保存在某个地方并将其与报头中的每个请求一起传递?这就是我在Login API Controller中所做的:
var user = await UserManager.FindAsync(model.UserName, model.Password);
if (user != null)
{
Authentication.SignOut(DefaultAuthenticationTypes.ExternalCookie);
var identity = await UserManager.CreateIdentityAsync(user, DefaultAuthenticationTypes.ApplicationCookie);
Authentication.SignIn(new AuthenticationProperties() { IsPersistent = false }, identity);
}
else
{
error = "Invalid username or password.";
}
这与创建MVC5项目时开箱即用的功能相同。我只是把它从普通控制器移到了API控制器。它的工作不需要照顾一些承载访问令牌。如果你能像我一样做,那还有什么意义?我认为当你使用无记名令牌时,它只会让请求变得更复杂。我错过什么了吗?
据我所知,当您需要使用与我们在pass中站点的前端相同的登录身份验证单独可用的后端时,承载令牌将更有意义,因此后端可以"看到"来自同一用户的请求。
你可以验证,在以这种方式登录后,前端网站和后端api都发送相同的会话cookie,如果是这样,你是黄金。如果在不同的域,你可能会有问题,但其他方面没有。如果是这样,那么将该用户传递到后端的承载令牌可能会重新发挥作用。