我正在使用Facebook作为ASP.NET核心身份的外部登录。我希望,即使用户登录了Facebook,用户也可以在网站上填写他的个人资料。为此,我使用ExternalLoginCallback
方法,我想从中获取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);
我还需要对用户数据进行一些其他检查,这需要直接调用图形API。
我的阻止点: - 在ExternalLoginCallback
方法中,我需要将"国家"one_answers"生日"分开以避免Facebook API返回错误,以免用户授予许可 - 为此,我需要用户access_token(对于方法中的其他调用),即使Facebook Identity Framework使用了它,我也看不到如何获取它 - 一旦创建了配置文件,我想访问此access_token,它应该存储在Usertokens表中(我猜?),但是我在那里找不到它,该表是空的。(我的dbcontext是扩展IdentityDbContext<AppUser, AppRole, long>
的类,不知道它是否有影响)
我找到了这个答案https://stackoverflow.com/a/42670559/48881677可能会有所帮助,但不够。
有帮助吗?:)
为了存储用户Facebook令牌,它需要将其指定在选项中(默认存储)。
var fo = new FacebookOptions();
fo.SaveTokens = true;
从那里我们可以调用图形方法权限以获取可用权限:https://graph.facebook.com/me/permissions?access_token={token}
然后可以使用类似的内容来读取:
foreach (var perm in data)
{
perms.Add((string)perm["permission"], (string)perm["status"]);
}