ControllerBase中的SignIn和SignOut方法的目的是什么?

时间:2016-10-10 17:26:40

标签: asp.net-core-mvc

SignIn类中的SignOutControllerBase方法的目的是什么(由Controller类继承)。

这两个方法分别返回SignInResultSignOutResult,它们都继承自基类ActionResult(实现IActionResult)。

查看SignInResultSignOutResult的源代码,您会看到他们分别致电HttpContext.Authentication.SignInAsync()HttpContext.Authentication.SignOutAsync()

但我从未见过这两种方法在任何地方使用过。如果您查看AccountController,则使用ApplicationSignInManager进行登录和退出,而不是上述方法。

由于这些是ActionResult,因此我认为这些将被用作控制器中操作的返回值。

比如像这样的东西:

public IActionResult SignIn()
{
    return SignIn(User, "Automatic");
}

但这显然什么也没做。它似乎没有签署用户,它似乎没有向用户返回任何内容。我不确定要传递哪些参数,但我发现User(来自控制器中的HttpContext)。

那么这两种方法的目的是什么,以及它们是如何使用的呢?

2 个答案:

答案 0 :(得分:3)

AccountController使用ASP.Identity,反过来,它在引擎盖下调用HttpContext.Authentication.SignInAsync()

他们为那些不想使用ASP.NET身份并希望自己做所有事情的人们提供便利。

答案 1 :(得分:1)

SignIn方法的第二个参数是AuthenticationScheme字符串。

此字符串可以是:

  • "承载"
  • "饼干"
  • " OpenIdConnect"

或者如果使用第三方身份验证提供程序:

  • "谷歌"
  • " Facebook和#34;
  • "微软"
  • "微博"

您可以使用常量。

,而不是将此参数作为硬编码字符串传递

如果您有其他第三方身份验证提供程序,AuthenticationScheme字符串可能是其他内容。此外,一些身份验证提供程序(例如UseCookieAuthentication中间件)允许您指定AuthenticationScheme