要从Facebook认证获取用户个人资料图片,可以使用ASP.NET Core 3.1的Microsoft.AspNetCore.Authentication.Facebook扩展库。以下是一个示例解决方案:
在ASP.NET Core 3.1项目中,安装Microsoft.AspNetCore.Authentication.Facebook NuGet包。
在Startup.cs
文件中的ConfigureServices
方法中添加Facebook身份验证服务:
using Microsoft.AspNetCore.Authentication.Facebook;
public void ConfigureServices(IServiceCollection services)
{
// ...
services.AddAuthentication()
.AddFacebook(options =>
{
options.AppId = "your_app_id";
options.AppSecret = "your_app_secret";
options.SaveTokens = true; // 保存访问令牌以便后续使用
options.Scope.Add("email");
options.Scope.Add("public_profile");
});
// ...
}
请确保将your_app_id
和your_app_secret
替换为您在Facebook开发者门户中创建的应用程序的实际值。
Startup.cs
文件的Configure
方法中添加身份验证中间件:public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
// ...
app.UseRouting();
app.UseAuthentication(); // 添加身份验证中间件
app.UseAuthorization();
// ...
}
using Microsoft.AspNetCore.Authentication;
public class HomeController : Controller
{
public IActionResult Index()
{
return View();
}
public IActionResult Login()
{
var redirectUrl = Url.Action("Callback", "Home", null, Request.Scheme);
return Challenge(new AuthenticationProperties { RedirectUri = redirectUrl }, "Facebook");
}
public async Task Callback()
{
var authenticateResult = await HttpContext.AuthenticateAsync();
if (!authenticateResult.Succeeded)
{
// 身份验证失败处理
return RedirectToAction("Login");
}
// 从用户声明中获取用户个人资料图片URL
var pictureUrl = authenticateResult.Principal.FindFirstValue("urn:facebook:picture");
// 处理用户个人资料图片URL
return View();
}
}
@model string
User Profile Picture
@if (!string.IsNullOrEmpty(Model))
{
}
Callback.cshtml
视图中添加以下内容:@{ Layout = null; }
@model string
此代码将在Facebook认证成功后将个人资料图片URL发送回父窗口,并关闭弹出窗口。
现在,当用户点击登录链接时,他们将被重定向到Facebook登录页面,并且在成功登录并授权后,将被重定向回您的应用程序,并在Callback
动作中获取用户个人资料图片URL。然后,您可以将此URL传递给视图以显示用户个人资料图片。