2016-10-10 35 views
0

ControllerBase類中的SignInSignOut方法的用途是什麼(它由Controller類繼承)。ControllerBase中SignIn和SignOut方法的用途是什麼?

這兩種方法分別返回SignInResultSignOutResult,它們都從基類ActionResult(實現IActionResult)繼承。

查找SignInResultSignOutResult的源代碼,您會看到它們分別稱爲HttpContext.Authentication.SignInAsync()HttpContext.Authentication.SignOutAsync()

但我從來沒有見過這兩種方法在任何地方使用。如果您查看AccountController,那麼它使用ApplicationSignInManager登錄和註銷,而不是上述方法。

由於這些是ActionResult,它使我相信這些將被用作控制器中操作的返回值。

比如像這樣的例子:

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

但是,這顯然是不執行任何操作。它似乎沒有登錄用戶,它似乎沒有返回任何東西給用戶。我不知道要通過什麼參數,但是我發現User(從控制器中的HttpContext)。

那麼這兩種方法的目的是什麼?他們打算如何使用?

回答

3

的AccountController使用ASP.Identity,這反過來,下方的引擎蓋不會調用HttpContext.Authentication.SignInAsync()

他們有作爲人便利不想使用ASP.NET身份誰和誰想要做的一切他們自己。

+0

我明白了。你知道它爲什麼沒有回報嗎?或者如何使用它?要指定什麼參數等 – Fred

+1

老實說,如果你問,這不適合你。這並不意味着它是一個有趣的安全接口點,除非您完全理解它以及登錄和身份驗證中間件如何掛在一起,否則不應使用它。有關於如何使用沒有身份的cookie中間件的文檔,它直接使用上下文,https://docs.asp.net/en/latest/security/authentication/cookie.html,但對於大多數人來說,這不是你想要最終做到。 – blowdart

0

SignIn方法的第二個參數是AuthenticationScheme字符串。

此字符串可以是:

  • 「承載」
  • 「曲奇」
  • 「OpenIdConnect」

或者,如果使用第三方認證提供商:

  • 「Google」
  • 「臉譜」
  • 「微軟」
  • 「推特」

而是通過這個參數作爲一個硬編碼字符串,你可以使用一個常數。

如果您有其他第三方身份驗證提供程序,AuthenticationScheme字符串可以是別的。還有一些身份驗證提供程序(例如UseCookieAuthentication中間件)允許您指定AuthenticationScheme

相關問題