Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 27.10.2017 19:20:39

Авторизация через WG

OpenServer:
1. Версия Laravel Framework 5.5.19
2. Версия PHP 7
3. MySQL 5.7
4. Apache-PHP-7

Авторизация для форума через Wargaming:
При написании форума, столкнулись с проблемой. Авторизация! Можно использовать "из коробки" с регистрацией и тп. Но гораздо лучше, когда авторизация идет через WG!
Задача:
Авторизация через WG, после успешной авторизации регистрация пользователя в БД, дать доступ к закрытым разделам и вывод сообщения: Привет username!

В SocialiteProviders нет готового решения. На github нашел этот пакет: Wargaming authentication for laravel 5.

Скачал, установил, все необходимые настройки выполнил.

routes/web.php

Route::get('login', 'AuthController@loginwg')->name('login'); //Авторизация 

Auth::routes();

Route::get('/home', 'HomeController@index')->name('home'); //Закрыт раздел

AuthController

Как указан в Usage example на GitHub

Тест авторизации:
Начали тестировать, ClickAuth>Идем на WG>Авторизируемся>Возвращаемся на сайт

После успешной авторизации, мы должны вернуться на сайт, если пользователь новый записать его в БД. И дать доступ к закрытым разделам + Приветствие: Привет username!

Но:
Ответ от WG приходит в браузерную строку в виде:

http://wg.com/?&status=ok&access_token=ee6a6d669d7a23333b77809375309494dac&nickname=NICKNAME&account_id=1111111&expires_at=111111111

Скрипт не записывает пользователя в БД и не дает доступ к закрытым разделам!

Помогите настроить авторизацию wink Пожалуйста!

Не в сети

#2 28.10.2017 15:05:31

Re: Авторизация через WG

Приходит верный ответ. Пример дальнейшей реализации:
Вам нужно создать в таблице users - provider (string) - хранится тип соц.сети, provider_id (int) - ид аккаунта соц.сети (1111111 у вас).

Затем должен быть роут на колбек.

Route::get('auth/{driver}/callback', 'AuthController@callback');

AuthController::callback - примерно:

        $user = Socialite::driver(WargamingDriver::class)->user();

        $findUser = User::where('provider_id', $user->getId())->where('provider', 'wargaming')->first();

        if ($findUser) {
            return auth()->login($findUser);
        }

        $newUser = $this->register([
            'email' => $user->getEmail(),
            'password' => str_random(32),
            'provider' => request()->route('driver'),
            'provider_id' => $user->id
        ]);

        return auth()->login($newUser);

Изменено andrei24 (28.10.2017 15:08:00)

Не в сети

Подвал раздела