MVC 4 oAuth Facebook不会返回电子邮件地址

时间:2012-08-24 21:57:17

标签: facebook-graph-api asp.net-mvc-4 oauth-2.0 facebook-oauth

我正在试验本月发布的MVC 4 oAuth。 任何人都可以指出我可以添加电子邮件地址的位置,以便我可以使用用户属性存储它吗?

我需要能够发送欢迎电子邮件,但不知道从开箱即用的MVC 4 oAuth开始。

理想情况下,成功登录后,我希望在我的控制器中从Facebook接收用户信息并将其放在表格中,以便离线流程可以发送欢迎电子邮件。

谢谢, 维克多

2 个答案:

答案 0 :(得分:5)

这是因为Facebook允许其用户指定与第三方认证服务共享的数据,例如您的网站Victor。默认情况下,我认为默认情况下不会共享电子邮件地址(是的,有多个可以添加到Facebook帐户)。用户必须进入并明确与第三方共享他们的电子邮件地址 - 这是我认为没有人使用过的。

Facebook强制共享的唯一“强制”共享数据是FullName(例如“Eric Duncan”)。其他所有内容都是可供用户共享的。

例如,我有我的Facebook设置只分享我的生日,但不是分娩年。我也有我的Facebook设置来分享我的兴趣,但不是我的电子邮件。

因此,您必须对保证的内容进行编码 - 在Facebook的情况下显示名称(在MVC 4.0 OAuth中称为“UserName”)。其他一切都无法保证。

我在OAuth应用程序中所做的事情,包括Facebook连接,是在第三方成功验证后,在回调网页上(例如MVC 4.0中的ExternalLoginConfirmation.cshtml),我会要求用户输入他们的显示名称,电子邮件地址,生日等。并在自定义视图模型上使用标准数据注释来创建所需的字段。

答案 1 :(得分:0)

为了让Facebook返回电子邮件,您必须在范围内指定它。例如,使用JS SDK,您可以执行类似....

的操作
return FB.login(function(response) {
    if (response.authResponse) {
      return window.location = '/auth/facebook/callback';
    }
  }, {scope: 'email,user_likes'}
);