facebook - laravel Socialite - Facebook 不返回用户的名字和姓氏

标签 facebook laravel laravel-5.4 laravel-socialite

我正在使用 laravel sociialite 创建 Facebook 登录。

这是我的提供商重定向

public function redirectToProvider($provider = null)
{
    if (!config("services.$provider"))
        abort('404'); //just to handle providers that doesn't exist

    if($provider == "facebook"){
        return Socialite::driver('facebook')
            ->fields(['first_name', 'last_name', 'email', 'gender', 'birthday'])
            ->scopes(['email', 'user_birthday'])->redirect();
    }

}

但是,在回调中,我转储 $user 以查看收到的数据

public function findOrCreateUser($user, $provider)
{
    $authUser = User::where('provider_id', $user->id)->first();
    if ($authUser) {
        return $authUser;
    }

    switch ($provider) {
        case "facebook":
            var_dump($user);
            return User::create([
                'firstname' => $user->user['first_name'],
                'lastname' => $user->user['last_name'],
                'email' => $user->user['email'],
                'email_verified' => true,
                'provider' => $provider,
                'provider_id' => $user->user['id']
            ]);
            break;

        case "google":
            return User::create([
                'firstname' => $user['name']['givenName'],
                'lastname' => $user['name']['familyName'],
                'email' => $user['email'],
                'email_verified' => true,
                'provider' => $provider,
                'provider_id' => $user['id']
            ]);
            break;
    }
}

这是我从 Facebook 收到的数据

object(Laravel\Socialite\Two\User)[215]
  public 'token' => string '******' (length=178)
  public 'refreshToken' => *****
  public 'expiresIn' => int ******
  public 'id' => string '*****' (length=15)
  public 'nickname' => null
  public 'name' => string '******' (length=15)
  public 'email' => string '*****' (length=24)
  public 'avatar' => string '******' (length=67)
  public 'user' => 
    array (size=6)
      'name' => string '*****' (length=15)
      'email' => string '*****' (length=24)
      'gender' => string '****' (length=4)
      'verified' => boolean ****
      'link' => string '*****' (length=60)
      'id' => string '****' (length=15)
  public 'avatar_original' => string '****' (length=66)
  public 'profileUrl' => string '*****' (length=60)

如您所知,我没有收到我请求的所有数据,而且我也找不到原因。

如何确保 facebook 向我提供用户的名字姓氏

最佳答案

这是我的工作代码:

    try
    {
        $socialUser = Socialite::driver('facebook')->fields(['name', 'first_name', 'last_name', 'email'])->user();
    }
    catch (Exception $e)
    {
        \Log::error($e);
        return redirect()->route('register')->with('error', 'ERROR');
    }

    $user = new \StdClass;
    $user->id = $socialUser->id;
    $user->name = $socialUser->name;
    $user->email = $socialUser->email;
    $user->firstname = $socialUser->user['first_name'];
    $user->lastname = $socialUser->user['last_name'];

尝试删除 ->scopes(['email', 'user_birthday']) 或将其替换为我的代码。

编辑:我认为我遇到了同样的问题,->user() 是解决方案!

关于facebook - laravel Socialite - Facebook 不返回用户的名字和姓氏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44811463/

相关文章:

facebook - 在本地测试 "Facebook Login"

php - Laravel Queue - 记住属性(property)状态?

mysql - 使用 laravel 获取外键详细信息

laravel - 如何在资源 Controller 的更新路由中传递id?

javascript - Laravel 路由在 API 中不起作用,返回页面 404

php - 如何在 Laravel 5.4 中的 *belongsToMany* 表连接上创建作用域?

javascript - 在 vue 组件属性中访问 laravel 路由

iphone - Facebook iOS SDK : session invalid on iPhone after logging out of Facebook from a desktop

javascript - Facebook 的 React JSX 转换器如何工作?

java - Facebook:图形 API java 库