Laravel Socialite的名字和姓氏

jun*_*stu 5 php laravel laravel-5.1

我正在使用Laravel的Socialite为应用程序添加社交身份验证.我可以分别检索全名,但不能检索名字和姓氏.回调发生后,Socialite正在处理它,成功检索用户.如果我要转发用户,我会从中$user = this->social->driver('facebook')->user();获取以下内容:

object(Laravel\Socialite\Two\User)#459 (8) {
     ["token" ]=> string(209) "{token}"
     ["id"] => string(17) "{socialID}"
     ["nickname"] => NULL
     ["name"] => string(14) "{Full Name}"
     ["email"] => string(19) "{Email address}"
     ["avatar"] => string(69) "https://graph.facebook.com/v2.4/{socialID}/picture?type=normal"
     ["user"] => array(6) {
        ["first_name"] => string(6) "{First name}"
        ["last_name"] => string(7) "{Last mame}"
        ["email"] => string(19) "{Email address}"
        ["gender"] => string(4) "male"
        ["verified"] => bool(true)
        ["id"] => string(17) "{socialID}"
    }
    ["avatar_original"] => string(68) "https://graph.facebook.com/v2.4/{socialID}/picture?width=1920"
Run Code Online (Sandbox Code Playgroud)

}

我可以通过$user->name或获得全名或电子邮件,$user->email但是,我无法获得单独的名字和姓氏.我已经尝试过$user->first_name尝试转储$user->user数组,但我看到的只是未定义的属性错误.

我不想做一些奇怪的事情,比如当单独的名字和姓氏明显存在时从全名中提取它,因为当中间名存在时它会变得丑陋.

我用Google搜索了一下,奇怪的是,没有人遇到过这个问题.我错过了文档中的内容吗?任何关于如何从user数组中检索名字和姓氏的建议都非常感谢.

Ric*_*ato 13

我发现有时用户对象不会包含名字和姓氏,除非你指定你需要那些字段.

//get the driver and set desired fields
$driver = Socialite::driver('facebook')
                ->fields([
                    'name', 
                    'first_name', 
                    'last_name', 
                    'email', 
                    'gender', 
                    'verified'
                ]);
// retrieve the user
$user = $driver->user();
Run Code Online (Sandbox Code Playgroud)

那么你可以得到这样的名字和姓氏

$user->user['first_name'] and $user->user['last_name']
Run Code Online (Sandbox Code Playgroud)

您可以要求的其他东西:

https://developers.facebook.com/docs/graph-api/reference/user/

对于谷歌加:

$user->firstname = $user->user['name']['givenName'];
$user->lastname = $user->user['name']['familyName'];
Run Code Online (Sandbox Code Playgroud)


Har*_*hil 6

您还可以使用包类offsetGet()中定义的方法,该方法返回,因此使用它您可以获得名字和姓氏,AbstractUsersocialite$this->user[$offset];

但对于facebookgoogle来说,由于它们的响应不同,所以它有所不同,所以我在下面为 facebook 和 google 提供了代码。

对于谷歌和脸书

$providerUser = Socialite::driver($provider)->user(); // $provider can be facebook, google etc.

switch($provider){
   case 'facebook':
      $first_name = $providerUser->offsetGet('first_name');
      $last_name = $providerUser->offsetGet('last_name');
      break;

   case 'google':
      $first_name = $providerUser->offsetGet('given_name');
      $last_name = $providerUser->offsetGet('family_name');
      break;

 // You can also add more provider option e.g. linkedin, twitter etc.

   default:
      $first_name = $providerUser->getName();
      $last_name = $providerUser->getName();
}

$user = User::create([
                'first_name' => $first_name,
                'last_name' => $last_name,
                'email' => $providerUser->getEmail(),
                'image' => $providerUser->getAvatar(),
            ]);
Run Code Online (Sandbox Code Playgroud)


koa*_*dev 5

根据$uservar 的转储,您应该可以执行以下操作来访问名称值:

$user->user['first_name']$user->user['last_name']