С помощью этот урок на Laracast (Laravel 5.0 — Socialite), конкретно до мин 12.11, Я успешно все настроил. Тем не менее, я использую Laravel 5.1
Определил мой маршрут, но в настоящий момент закомментировал провайдера обратного вызова, так как я просто пытаюсь получить сведения о пользователе через полученный токен:
Route::get('auth/facebook', 'Auth\AuthController@redirectToProvider');
//Route::get('auth/facebook/aaa', 'Auth\AuthController@handleProviderCallback');
Добавленные потребности в config>services.php
:
'facebook' => [
'client_id' => '##',
'client_secret' => env('FB_SECRET_ID'),
'redirect' => 'http://laratest.dev/auth/facebook',
],
Я решил вернуться на ту же страницу (auth/facebook
) теперь. Вот почему я установил возврат как domain.devv/auth/facebook
для тестирования.
В моем AuthController.php
Я установил:
public function redirectToProvider(AuthenticateUser $authenticateUser, Request $request)
{
return $authenticateUser->execute($request->has('code'));
}
И наконец, по моему AuthenticateUser.php
:
use Illuminate\Contracts\Auth\Guard; (PS. I changed Authenticator to Guard)
class AuthenticateUser {
private $users;
private $socialite;
private $auth;
public function __construct(UserRepository $users, Socialite $socialite, Guard $auth)
{
$this->users = $users;
$this->socialite = $socialite;
$this->auth = $auth;
}
public function execute($hasCode)
{
// dd($hasCode) *First dd
if ( ! $hasCode) return $this->getAuthorizationFirst();
// $user = $this->socialite->driver('facebook')->user();
// dd($hasCode) *Second dd
// dd($user) *Third dd
}
private function getAuthorizationFirst()
{
return $this->socialite->driver('facebook')
->scopes(['public_profile', 'email'])->redirect();
}
}
Теперь я нажимаю Login with Facebook
ссылка и получение направлено на domain.dev/auth/facebook?code=943299043290...
Когда я использую только *First dd
(со всеми другими закомментированными строками закомментировано) — возвращает false
,
Когда я использую только *Second dd
(с комментированием строки $user = $this->socialite->driver('facebook')->user();
), это возвращает true
,
Так что все работает отлично и проходит execute()
затем через getAuthorizationFirst()
, Наконец, возвращается к execute()
с взятым токеном, который также содержится в ссылке (domain.dev/auth/facebook?code=943299043290...
).
Моя проблема возникает здесь:
На втором я раскомментирую $user = $this->socialite->driver('facebook')->user();
Я получаю сообщение об ошибке:
ClientException в строке Middleware.php 69: ошибка клиента: 400
1. в строке /Applications/MAMP/htdocs/laratest/vendor/guzzlehttp/guzzle/src/Middleware.php 69
2. в Middleware :: GuzzleHttp {closure} (object (Response)) в строке Promise.php 199
3. в Promise :: callHandler (‘1’, объект (Response), массив (объект (Promise), объект (Closure), null)) в строке Promise.php 152
4. в Promise :: GuzzleHttp \ Promise {closure} () в строке TaskQueue.php 60
5. в TaskQueue-> run () в строке 96 CurlMultiHandler.php
эта строка ($user = $this->socialite->driver('facebook')->user();
) является не работает для меня по некоторым причинам (в то время как это происходит в руководство (мин 12,11 для 15-секундного краткого объяснения).
Всякий раз, когда я использую $user = $this->socialite->driver('facebook')->user();
Я получаю ошибку ClientException in Middleware.php line 69: Client error: 400
и, конечно, я не могу получить dd($user)
,
Чтобы добавить, когда я вижу ошибку ClientException, ссылка все еще с кодом 🙁domain.dev/auth/facebook?code=943299043290...
)
у меня тоже была эта проблема, в моем случае я должен добавить свой домен в config / session.php в поле домена и добавить его тоже в моем поставщике приложений
Других решений пока нет …