设置了默认的 ASP.Net MVC 5 应用程序后,我无法理解为什么下面的代码片段调用了 SignInManager。
这是在 ManageController 中,它具有 [Authorize] 属性。
//
// POST: /Manage/RemoveLogin
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<ActionResult> RemoveLogin(string loginProvider, string providerKey)
{
ManageMessageId? message;
var result = await UserManager.Get().RemoveLoginAsync(User.Identity.GetUserId<int>(), new UserLoginInfo(loginProvider, providerKey));
if (result.Succeeded)
{
var user = await UserManager.Get().FindByIdAsync(User.Identity.GetUserId<int>());
if (user != null)
{
await SignInManager.Get().SignInAsync(user, isPersistent: false, rememberBrowser: false);
}
message = ManageMessageId.RemoveLoginSuccess;
}
else
{
message = ManageMessageId.Error;
}
return RedirectToAction("ManageLogins", new { Message = message });
}
我想知道,每当我检索经过身份验证的用户时,是否应该重复此步骤,即检查用户是否为空,如果不是,则等待 SignInAsync。编辑:检查用户是否为空,如果是,等待SignInAsync
现在,我已经创建了一个新的控制器,我已经赋予了 [Authorize] 属性,并且在控制器的 Index() 函数中,我执行以下操作:
var user = await UserManager.FindByIdAsync(User.Identity.GetUserId<int>());
如果我在两个选项卡中加载该页面,在其中一个选项卡中注销,然后刷新页面,我将被重定向到登录屏幕。我已经附加了一个调试器,但无法导致 SignInManager 被命中的情况。
在什么情况下用户不为空?
他们做完全不同的事情。该Authorize
属性检查用户是否经过身份验证和授权访问操作(基于角色权限等)。它不会对用户进行身份验证。这就是调用的SignInManager
目的。它实际上对用户进行身份验证,以便用户可以通过Authorize
属性所做的检查。
至于何时用户可能为空,有效地,如果操作受Authorize
它保护,则可能永远不会。它必须采取一些奇怪的事件汇合,在数据库中找到用户才能登录,但在您尝试检索它时以某种方式被删除。换句话说:不太可能。尽管如此,当一个值可能为空时,总是执行这样的空检查是一种很好的做法,这user
可能是。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句