Laravel 5.2 Socialite 检索空电子邮件

Posted

技术标签:

【中文标题】Laravel 5.2 Socialite 检索空电子邮件【英文标题】:Laravel 5.2 Socialite Retrieve Null Email 【发布时间】:2016-11-03 03:36:37 【问题描述】:

我是 Laravel 的新手,我正在尝试进行社交验证。 我看过一些教程,我必须从 Facebook 检索用户 ID、个人资料图片和名称。我的问题是电子邮件,它是空的。

我现在的对象是这样的:

User #195 ▼
  +token: "EAACYY1xBrzcBAO9KZAjZAZAZBQHWhbtZAb9lIXvH9Y6miRUiABImupk3ZCzHRxy2ZBxc9DU8f1ZAcrw0NEVMmy3GOQMSSyrmDTvMPyREvGm4pA1Ok6zI85LxES4Huy2ZCsxIUr2ISbLreLIv1ZACItUUoqqAnvVPyR4s0ZD"
  +id: "989087311199546"
  +nickname: null
  +name: "MyName"
  +email: null
  +avatar: "https://graph.facebook.com/v2.2/mypicturecode/picture?type=normal"
  +"user": array:2 [▼
    "name" => "MyName"
    "id" => "MyId"
  ]

我的控制器是:

class FacebookController extends Controller

   public function facebook()
    
        return Socialite::driver('facebook')
            ->scopes(['email'])->redirect();
    
    public function callback()
    
        $user = Socialite::with('facebook')->user();

        return dd($user);
        // $user->token;
    

我最近发现了一些东西。我的作曲家中有 "guzzlehttp/guzzle": "~4.0" 以避免 cURL 错误 60: SSL 证书问题:无法获取本地颁发者证书(请参阅http://curl.haxx.se/libcurl/c/libcurl-errors.html)强>错误。安装 guzzle 4.0 后,Laravel Socialite 回到 2.0.4 版本。看起来 2.0.18 版本处理电子邮件和名字/姓氏问题。问题是安装guzzle 4.0时,需要socialite 2.0.4

【问题讨论】:

你尝试了另一个 Facebook 吗? 是的,我尝试了至少 3 个不同的 Facebook 帐户 【参考方案1】:

Facebook 用户可以使用电话号码而不是电子邮件地址进行注册。这意味着 facebook 没有该用户的电子邮件地址。

您可能有自己的隐私政策。

看看这个:https://developers.facebook.com/docs/facebook-login/permissions#reference-email

【讨论】:

我测试了几封来自使用电子邮件在 facebook 中注册的人的电子邮件,我的 Facebook 应用程序具有检索用户电子邮件信息的复选框。 听起来很奇怪,你为什么不试试这个语法来代替你的呢? $user = Socialite::driver('facebook')->fields([ 'first_name', 'last_name', 'email', 'gender', 'birthday' ])->user(); // 将数据存储到我们的使用表并将它们记录到 $data = [ 'name' => $user->getName(), 'first_name' => $user->getName(), 'email' => $user- >getEmail() ];【参考方案2】:

如果您使用的是 laravel 5.2 和 socialite 2.0 。 那么你将面临这个问题。这是社交名流中的一个错误。 用下面给出的代码替换它。 路径:vendor\laravel\socialite\src\Two\

https://github.com/laravel/socialite/blob/2.0/src/Two/FacebookProvider.php 然后下面的代码将为您提供完整的详细信息 return Socialite::driver('facebook')->fields([ 'first_name', 'last_name', 'email', 'gender', 'birthday' ])->scopes([ 'email', 'user_birthday' ])->redirect();

【讨论】:

【参考方案3】:

您只需要为您想要从 Facebook 对象获取的有关您的用户 的任何数据添加更多权限 脸书apiurl

【讨论】:

以上是关于Laravel 5.2 Socialite 检索空电子邮件的主要内容,如果未能解决你的问题,请参考以下文章

无法将 Laravel / Socialite 与 Lumen 一起使用

使用 Laravel Socialite 登录 Facebook

Laravel Socialite 与 Facebook 未登录

Laravel 7 Socialite Google 登录显示无效的授权错误

用户取消应用请求后,Laravel 5 Socialite Facebook 登录错误处理回调

Laravel 使用 Socialite(google、facebook 等)登录并创建我自己的应用程序的访问令牌