Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 登录后从UserManager获取用户_C#_Asp.net Core_Asp.net Core Identity - Fatal编程技术网

C# 登录后从UserManager获取用户

C# 登录后从UserManager获取用户,c#,asp.net-core,asp.net-core-identity,C#,Asp.net Core,Asp.net Core Identity,我正在尝试在外部登录后使用.Net Core和IdentityServer 4从UserManager获取用户 public async Task<IActionResult> ExternalLoginCallback(string returnUrl = null, string remoteError = null) { if (remoteError != null) { ErrorMessage = $"Error from external

我正在尝试在外部登录后使用.Net Core和IdentityServer 4从UserManager获取用户

public async Task<IActionResult> ExternalLoginCallback(string returnUrl = null, string remoteError = null)
{
    if (remoteError != null)
    {
        ErrorMessage = $"Error from external provider: {remoteError}";
        return RedirectToAction(nameof(Login));
    }
    var info = await _signInManager.GetExternalLoginInfoAsync();
    if (info == null)
    {
        return RedirectToAction(nameof(Login));
    }

    // Sign in the user with this external login provider if the user already has a login.
    var result = await _signInManager.ExternalLoginSignInAsync(info.LoginProvider, info.ProviderKey, isPersistent: false, bypassTwoFactor: true);
    if (result.Succeeded)
    {
        var user = await _userManager.GetUserAsync(HttpContext.User);
        var serviceProvider = HttpContext.RequestServices;
        var context = serviceProvider.GetRequiredService<PublicAstootContext>();
        var coinbaseRule = new CoinbaseRule();
        await coinbaseRule.UpdateCoinbaseAccountInfo(context, user.Id, info);    
        //...
    }
}
public异步任务ExternalLoginCallback(string returnUrl=null,string remoteError=null)
{
if(remoteError!=null)
{
ErrorMessage=$“来自外部提供程序的错误:{remoteError}”;
返回重定向到操作(名称(登录));
}
var info=await _signInManager.getexternallogininfosync();
if(info==null)
{
返回重定向到操作(名称(登录));
}
//如果用户已经登录,请使用此外部登录提供程序登录该用户。
var result=await _signInManager.externalLoginIgninaSync(info.LoginProvider,info.ProviderKey,isPersistent:false,bypassTwoFactor:true);
if(result.successed)
{
var user=await\u userManager.GetUserAsync(HttpContext.user);
var serviceProvider=HttpContext.RequestServices;
var context=serviceProvider.GetRequiredService();
var coinbaseRule=新的coinbaseRule();
等待coinbaseRule.UpdateCoinbaseAccountInfo(上下文、用户Id、信息);
//...
}
}
但是,即使在登录成功之后,当我尝试从usermanger获取用户时,该用户始终为null


在外部登录后,如何从UserManager获取用户?

调用
externalLoginInInAsync
不会填充
HttpContext.user
-它会在尝试填充
HttpContext.user
之前写入身份验证cookie,并在后续请求中读取。在您的示例中,对
ExternalLoginSignInAsync
的调用与对
GetUserAsync
的调用发生在同一个请求中,这意味着
HttpContext.User
将不代表经过身份验证的用户,因此找不到匹配项

相反,您可以使用获取
用户的正确值:

var user = await _userManager.FindByLoginAsync(
    info.LoginProvider, info.ProviderKey);