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)
您还可以使用包类offsetGet()
中定义的方法,该方法返回,因此使用它您可以获得名字和姓氏,AbstractUser
socialite
$this->user[$offset];
但对于facebook和google来说,由于它们的响应不同,所以它有所不同,所以我在下面为 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)
归档时间: |
|
查看次数: |
8365 次 |
最近记录: |