Mvc核心在ExternalLoginSignInAsync之后获取UserId

Boj*_*jan 1 c# asp.net-mvc dapper asp.net-identity asp.net-core-mvc

我通过以下方式通过第三方(例如Google)登录用户:

var info = await _signInManager.GetExternalLoginInfoAsync();
var result = await _signInManager.ExternalLoginSignInAsync(info.LoginProvider, info.ProviderKey, false);
Run Code Online (Sandbox Code Playgroud)

上面的内容由于存在而应该成功,如何捕获登录用户的userId?userId是位于我的数据库中Users表上的userId,它不会来自第三方登录提供程序。

这可能吗?我现在似乎找不到任何可以让我检索它的函数或对象。我以为可能是从User Object中获取的,但是据我的理解,它来自HttpContext,在此时,该用户将不会具有已登录的用户身份,至少直到刷新页面后才如此。我也想避免仅出于此目的重定向到另一个页面。

注意:我正在使用Dapper,并且在我的项目中没有EF的痕迹。不知道这有多重要。

SO *_*ood 6

ExternalLoginSignInAsync内部调用

var user = await UserManager.FindByLoginAsync(loginProvider, providerKey);
Run Code Online (Sandbox Code Playgroud)

因此,您可以执行以下操作:

var info = await _signInManager.GetExternalLoginInfoAsync();
var result = await _signInManager.ExternalLoginSignInAsync(info.LoginProvider, info.ProviderKey, false);

if (result = IdentityResult.Success)
{
    var user = await _userManager.FindByLoginAsync(info.LoginProvider, info.ProviderKey);
}
Run Code Online (Sandbox Code Playgroud)

永远记住,ASP.NET Core是开源的,因此大多数情况下最快的就是查看默认实现。