Mvc Core在ExternalLoginSignInAsync之后获取UserId

问题描述 投票:1回答:1

我通过以下方式通过谷歌等第三方登录我的用户:

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

如果上述成功因为它们存在,我如何捕获登录用户的userId? userId是位于Users表的数据库中的userId,它不是来自第三方登录提供程序的任何内容。

这可能吗?我似乎无法找到任何可以让我在此时检索它的函数或对象。我想也许可以从用户对象中获取它,但据我所知,来自HttpContext,此时此刻不会让用户注册为登录,至少在我刷新页面之前。我还想避免为了这个目的而重定向到另一个页面。

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

c# asp.net-mvc asp.net-core-mvc asp.net-identity dapper
1个回答
4
投票

ExternalLoginSignInAsync内部打电话

var user = await UserManager.FindByLoginAsync(loginProvider, providerKey);

所以,你也可以这样做:

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);
}

永远记住ASP.NET Core是开源的,因此大多数时候最快的只是查看默认实现。

© www.soinside.com 2019 - 2024. All rights reserved.