当控制器具有 [Authorize] 属性时,此 SignInManager 调用的目的是什么?

戴安娜

设置了默认的 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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

复制控制器具有节点反关联性时,Kubernetes DaemonSet的用途是什么

为什么只有当我的控制器具有@RequestMapping(produces = ...)时,Spring的HandlerInterceptorAdapter才被调用两次?

Angular,为什么子控制器与父控制器具有相同的作用域?

登录用户在调用具有 [Authorize] 属性的 Web API 时收到 401 Unauthorized 错误

在动作和控制器中使用不同身份验证方案的Authorize属性的行为是什么

JS Fetch API无法与具有Authorize属性的ASP.NET Core 2控制器一起使用

即使没有[Authorize]属性也会调用HandleAuthenticateAsync

验证时访问[Authorize]控制器时获取404

用[Authorize]属性修饰的集成测试控制器

.Net核心Authorize属性在继承的控制器中

Blazor Server无法使用[Authorize]属性访问控制器

Dnn 依赖注入 - 尝试创建控制器时发生错误...确保控制器具有无参数的公共构造函数

尝试创建“ EmployeeController”类型的控制器时发生错误。确保控制器具有无参数的公共构造函数

Azure移动客户端自定义身份验证无法访问具有[Authorize]属性的控制器

在Tag Helper上具有ViewContext属性的目的是什么?

EntitySetController的GetEntityByKey上的Authorize属性未被调用

Laravel中的Request类中的authorize方法的目的是什么?

使用 jquery 获取按钮的属性以调用具有属性的控制器

[Authorize] 属性如何知道用户是否具有角色?

具有Authorize属性的HotChocolate,如何获取当前登录的用户?

触发COM事件时,Lock()/ Unlock()调用的目的是什么?

在style属性上使用Angular4时,此属性绑定有什么问题?

鉴于JavaScript具有闭包,此关键字的目的是什么?

跳过特定控制器API上的[Authorize]属性以获得可选授权是否安全?

有什么方法可以在.NET Core 3.1控制台应用程序中使用SignInManager <User> .PasswordSignInAsync?

MVC5身份验证:每个控制器或基本控制器上的Authorize属性

在Java Spring MVC的所有(或我的大多数)控制器中具有相同的方法调用并设置属性

违反ASP.NET Core中的Authorize属性的默认行为是什么

存储具有可过滤属性的项目的正确方法是什么?