【问题标题】:MVC 4 oAuth With Facebook does not return email addressMVC 4 oAuth With Facebook 不返回电子邮件地址
【发布时间】:2014-01-09 08:53:16
【问题描述】:
我正在试验本月发布的 MVC 4 oAuth。
谁能指出我可以在哪里添加电子邮件地址,以便我可以将其与用户属性一起存储?
我需要能够发送欢迎电子邮件,但不知道从哪里开始使用开箱即用的 MVC 4 oAuth。
理想情况下,成功登录后,我希望在我的控制器中接收来自 Facebook 的用户信息并将其放入表中,以便离线进程可以发送欢迎电子邮件。
谢谢,
维克多
【问题讨论】:
标签:
facebook-graph-api
asp.net-mvc-4
oauth-2.0
facebook-oauth
【解决方案1】:
这是因为 Facebook 允许其用户指定与第三方身份验证服务共享哪些数据,例如您的网站 Victor。默认情况下,我相信电子邮件地址(是的,您可以添加多个到 facebook 帐户)默认不共享。用户必须进入并明确与第 3 方共享他们的电子邮件地址——我认为没有人使用过。
Facebook 强制共享的唯一“强制性”共享数据是全名(例如“Eric Duncan”)。用户可以选择分享其他所有内容。
例如,我将 Facebook 设置为只分享我的生日,而不是生日。我也有我的 Facebook 设置来分享我的兴趣,但不是我的电子邮件。
因此,您必须对有保证的内容进行编码 - Facebook 的显示名称(在 MVC 4.0 OAuth 中称为“用户名”)。其他一切都无法保证。
我在我的 OAuth 应用程序(包括 Facebook 连接)中所做的是在成功通过第 3 方身份验证后,在回调 url 页面(例如 MVC 4.0 中的 ExternalLoginConfirmation.cshtml)上,我会要求用户输入他们的显示名称、电子邮件地址、出生日期等。并在您的自定义视图模型上使用标准数据注释使这些字段成为必填字段。
【解决方案2】:
为了让 Facebook 返回电子邮件,您必须在范围中指定它。例如,使用 JS SDK 你会做类似......
return FB.login(function(response) {
if (response.authResponse) {
return window.location = '/auth/facebook/callback';
}
}, {scope: 'email,user_likes'}
);