【发布时间】:2016-10-21 09:37:12
【问题描述】:
代码如下
启动验证:
app.UseFacebookAuthentication(new FacebookAuthenticationOptions
{
AppId = "xxx",
AppSecret = "xxx",
BackchannelHttpHandler = new FacebookBackChannelHandler(),
UserInformationEndpoint = "https://graph.facebook.com/v2.4/me?fields=id,name,email,first_name,last_name,location",
Scope = { "email" }
});
在 accountcontroler RegisterExternal 类中,我调用以下内容:
var info = await AuthenticationManager_GetExternalLoginInfoAsync_WithExternalBearer();
这个类是什么:
private async Task<ExternalLoginInfo> AuthenticationManager_GetExternalLoginInfoAsync_WithExternalBearer()
{
ExternalLoginInfo loginInfo = null;
var result = await Authentication.AuthenticateAsync(DefaultAuthenticationTypes.ExternalBearer);
if (result != null && result.Identity != null)
{
var idClaim = result.Identity.FindFirst(ClaimTypes.NameIdentifier);
if (idClaim != null)
{
loginInfo = new ExternalLoginInfo()
{
DefaultUserName = result.Identity.Name == null ? "" : result.Identity.Name.Replace(" ", ""),
Login = new UserLoginInfo(idClaim.Issuer, idClaim.Value),
};
}
}
return loginInfo;
}
这是因为 RegisterExternal 类默认使用身份验证类型 cookie。每当我使用它时,它都会返回 null,所以在网上冲浪后,我注意到有必要添加此代码,这反过来将使用承载进行身份验证,这将导致用户名和身份不再为 null 的回复,因此授权。 (见下图)
Return object (username and login)
但是,当我想认领电子邮件时,我不能这样做。无论我做什么,它都会返回 null 。
【问题讨论】:
-
Facebook 不必履行电子邮件声明。你确定总是这样吗?你可以用其他 FB 帐户检查吗?
-
我已经确认 facebook 确实在根据其请求请求电子邮件,如果我查看该请求,我会看到 facebook 正在发送我的电子邮件。 (每当您按下“使用 facebook 登录”按钮时,facebook 会弹出一个屏幕,显示“该应用程序将收到以下内容”。它确实会询问我的电子邮件,如果我编辑数据,我会看到我的电子邮件显示,所以工作正常)
-
你有没有解决过这个@MichaelTralala?目前遇到同样的事情
-
@Braydie 我没有解决这个问题。我认为最好不要使用webapi内置功能并下载和配置facebook api手册。
-
我忘了我问了!我想我可能有一些工作 - 现在会发布它
标签: c# facebook-graph-api asp.net-web-api registration claims-based-identity