ASP.NET 核心Facebook认证中间件用户图片
ASP.NET Core Facebook Authentication Middleware user picture
我正在尝试使用 ASP.NET Core 1.0 中的 Facebook 身份验证中间件检索用户个人资料图片。我已经设法添加这些配置以使用户图片可用
app.UseFacebookAuthentication(new FacebookOptions()
{
AppId = Configuration["Authentication:Facebook:AppId"],
AppSecret = Configuration["Authentication:Facebook:AppSecret"],
Scope = { "public_profile" },
Fields = { "picture" }
});
并检索数据
var email = info.Principal.FindFirstValue(ClaimTypes.Email);
和
var userName = info.Principal.FindFirstValue(ClaimTypes.GivenName);
但是我现在如何检索用户图片,因为没有 Claim Type 呢?
是的,一般来说,如果您指定 Fields = { "picture" }
。
,UserInfo 端点的标准 (oauth) 实现可能 return 图片响应
Facebook Graph API 提供 https://graph.facebook.com/v2.6/me 作为 UserInformation 端点,ASP.NET 核心 Facebook Auth 中间件将其用于声明填充。
问题是如果您使用此 \me
端点,Facebook Graph API 不会 return picture
响应。他们以前这样做过,但出于某种原因已经删除了它。相关SO:facebook oauth, no picture with basic permissions
但是您可以使用以下方法获取图片:
https://graph.facebook.com/USERNAME/picture
正如 Set 在他的回答中所说,您可以像这样 https://graph.facebook.com/{user-id}/picture
.
使用 Facebook Graph API 获取图片
示例代码:
var info = await _signInManager.GetExternalLoginInfoAsync();
var identifier = info.Principal.FindFirstValue(ClaimTypes.NameIdentifier);
var picture = $"https://graph.facebook.com/{identifier}/picture";
您可能需要检查 info
是否不为空以及 info.LoginProvider
是否为 facebook。
在我的项目ASP.NET Core 2.2中我使用了这段代码:
services.AddAuthentication()
.AddFacebook(options =>
{
options.AppId = Configuration["Authentication:Facebook:AppId"];
options.AppSecret = Configuration["Authentication:Facebook:AppSecret"];
options.Events.OnCreatingTicket = (context) =>
{
var picture = $"https://graph.facebook.com/{context.Principal.FindFirstValue(ClaimTypes.NameIdentifier)}/picture?type=large";
context.Identity.AddClaim(new Claim("Picture", picture));
return Task.CompletedTask;
};
});
在 Controller 中,在 ExternalLoginCallback 操作中,我以这种方式检索值:
var info = await _signInManager.GetExternalLoginInfoAsync();
var picture = info.Principal.FindFirstValue("Picture");
我正在尝试使用 ASP.NET Core 1.0 中的 Facebook 身份验证中间件检索用户个人资料图片。我已经设法添加这些配置以使用户图片可用
app.UseFacebookAuthentication(new FacebookOptions()
{
AppId = Configuration["Authentication:Facebook:AppId"],
AppSecret = Configuration["Authentication:Facebook:AppSecret"],
Scope = { "public_profile" },
Fields = { "picture" }
});
并检索数据
var email = info.Principal.FindFirstValue(ClaimTypes.Email);
和
var userName = info.Principal.FindFirstValue(ClaimTypes.GivenName);
但是我现在如何检索用户图片,因为没有 Claim Type 呢?
是的,一般来说,如果您指定 Fields = { "picture" }
。
Facebook Graph API 提供 https://graph.facebook.com/v2.6/me 作为 UserInformation 端点,ASP.NET 核心 Facebook Auth 中间件将其用于声明填充。
问题是如果您使用此 \me
端点,Facebook Graph API 不会 return picture
响应。他们以前这样做过,但出于某种原因已经删除了它。相关SO:facebook oauth, no picture with basic permissions
但是您可以使用以下方法获取图片: https://graph.facebook.com/USERNAME/picture
正如 Set 在他的回答中所说,您可以像这样 https://graph.facebook.com/{user-id}/picture
.
示例代码:
var info = await _signInManager.GetExternalLoginInfoAsync();
var identifier = info.Principal.FindFirstValue(ClaimTypes.NameIdentifier);
var picture = $"https://graph.facebook.com/{identifier}/picture";
您可能需要检查 info
是否不为空以及 info.LoginProvider
是否为 facebook。
在我的项目ASP.NET Core 2.2中我使用了这段代码:
services.AddAuthentication()
.AddFacebook(options =>
{
options.AppId = Configuration["Authentication:Facebook:AppId"];
options.AppSecret = Configuration["Authentication:Facebook:AppSecret"];
options.Events.OnCreatingTicket = (context) =>
{
var picture = $"https://graph.facebook.com/{context.Principal.FindFirstValue(ClaimTypes.NameIdentifier)}/picture?type=large";
context.Identity.AddClaim(new Claim("Picture", picture));
return Task.CompletedTask;
};
});
在 Controller 中,在 ExternalLoginCallback 操作中,我以这种方式检索值:
var info = await _signInManager.GetExternalLoginInfoAsync();
var picture = info.Principal.FindFirstValue("Picture");