Использование этого руководства по 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 в строке 69 Middleware.php: ошибка клиента: 400
1. в /Applications/MAMP/htdocs/laratest/vendor/guzzlehttp/guzzle/src/Middleware.php, строка 69
2. в Middleware :: GuzzleHttp {closure} (object (Response)) в строке 199 Promise.php
3. в Promise :: callHandler ('1', object (Response), array (object (Promise), object (Closure), null)) в строке 152 Promise.php
4. в Promise :: GuzzleHttp \ Promise {closure} () в строке 60 TaskQueue.php
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...
)