#facebook #laravel #laravel-socialite
#Facebook #laravel #laravel-socialite
Вопрос:
Я хочу, чтобы другие поля от пользователей facebook, когда они входят в систему, как user_location
Теперь я узнал, что мне нужно отправить приложение на проверку, чтобы получить одобрение на получение местоположения пользователя. Также Facebook уже одобрил его.
Теперь я пытаюсь выполнить выборку, используя следующий код:
$this->socialite->driver($provider)->scopes(['user_location', 'user_hometown'])->redirect()
но когда я сбрасываю это:
$this->socialite->driver($provider)->user();
Он не предоставляет мне user_location в массиве пользовательских данных. Но facebook запросил разрешение на это, когда я попытался войти в систему в первый раз.
Это данные, которые я получаю:
User {#330 ▼
token: "xxxxxxxxxx"
refreshToken: null
expiresIn: "xxxxx"
id: "xxxxxx"
nickname: null
name: "xxxxxx"
email: "xxxxxx@xx.com"
avatar: "xxxxxx"
user: array:5 [▶]
"avatar_original": "xxxxxxxx"
}
Итак, могу ли я узнать, что я делаю не так, и как я могу получить местоположение пользователя.
Заранее спасибо, ребята
Ответ №1:
Вы можете использовать метод fields() в своем методе перенаправления, чтобы задать дополнительные поля и использовать их позже в своем приложении.
public function redirectToFacebook()
{
return $this->socialite->driver($provider)->fields([
'first_name', 'last_name', 'email', 'gender','location'
])->scopes([
'user_location'
])->redirect();
}
Затем позже получите к ним доступ с помощью:
public function handleFacebookCallback()
{
$providerUser = $this->socialite->driver($provider)->fields([
'first_name', 'last_name', 'email', 'gender', 'birthday','location'
])->user();
dd($providerUser);
}
Обратите внимание, что fields() перезапишет значения по умолчанию, поэтому в приведенном выше примере вы не получите свойства «проверено» и «ссылка» для пользователя.