Facebook graph api 存储ASP.Net核心标识为外部登录提供程序生成的UserToken

Facebook graph api 存储ASP.Net核心标识为外部登录提供程序生成的UserToken,facebook-graph-api,asp.net-core,asp.net-identity,asp.net-core-identity,Facebook Graph Api,Asp.net Core,Asp.net Identity,Asp.net Core Identity,我使用Facebook作为ASP.Net核心身份的外部登录。 我希望,即使用户使用Facebook登录,用户也能在网站上填写他的个人资料。 为此,我使用了ExternalLoginCallback方法,从中我想从Facebook获取数据,如出生日期、地点(国家) 一个问题是,如果用户取消选中某些权限,则对Facebook的默认调用将失败: var info = await _signInManager.GetExternalLoginInfoAsync(); if (info == null)

我使用Facebook作为ASP.Net核心身份的外部登录。 我希望,即使用户使用Facebook登录,用户也能在网站上填写他的个人资料。 为此,我使用了
ExternalLoginCallback
方法,从中我想从Facebook获取数据,如出生日期、地点(国家)

一个问题是,如果用户取消选中某些权限,则对Facebook的默认调用将失败:

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);
我还需要对用户数据进行一些额外的检查,这需要直接调用Graph API

我的阻碍点: -在
ExternalLoginCallback
方法中,我需要将“国家”和“生日”分开,以避免Facebook API在用户未授予权限时返回错误 -为此,我需要用户访问令牌(以及方法中的其他调用),即使Facebook身份框架使用该令牌,我也不知道如何获取该令牌 -一旦创建了概要文件,我想访问这个access_令牌,它应该存储在UserTokens表中(我想是吧?),但是我在那里找不到它,表是空的。(my DbContext是一个扩展
IdentityDbContext的类,它可能会有所帮助,但还不够


有什么帮助?:)

要存储用户Facebook令牌,需要在选项中指定它(默认情况下不存储)

从那里我们可以调用graph方法permissions来获取可用的权限:
https://graph.facebook.com/me/permissions?access_token={token}

然后可以这样读:

foreach (var perm in data)
{
   perms.Add((string)perm["permission"], (string)perm["status"]);
}
foreach (var perm in data)
{
   perms.Add((string)perm["permission"], (string)perm["status"]);
}