Ручной вход в Laravel, кажется, не является постоянным - PullRequest
0 голосов
/ 26 февраля 2019

Отправка моего проекта laravel в производство. Кажется, я больше не могу войти в систему пользователя (он работал локально)

Я использую socialite и graph (microsoft) для входа в систему своих пользователей.Единственное, что я изменил, это то, что я добавил сертификат ssl для обработки https (поскольку Microsoft Graph может перенаправлять только по https, если не localhost)

Проблема заключается в том, что после перенаправления в Graph я вхожу, а затем перенаправляювернуться на Graph (он зацикливается на API) Сразу после строки Auth :: login (см. код ниже) я сделал dd (Auth :: check ()), и я получаю true, так что похоже, аутентификация выполнена, нооно не является постоянным, поэтому, когда я перенаправляю его на панель инструментов, он возвращается на страницу входа в граф.

Сначала я подумал, что это может быть проблема с https (перенаправление графа по https, Laravel входит в систему через сеанс https, а не по протоколу http), поэтому я установил безопасное значение false в файле session.php, но у меня все еще остается та же проблема.

Вот мой код: метод, достигнутый авторизацией перенаправления:

public function graph_authorize()
{
    $user = Socialite::driver('graph')->stateless()->user();
    $token = $user->token;
    $refresh = $user->refreshToken;
    $expires = $user->expiresIn;
    $token_cache = new TokenCache();
    if (strpos($user->email,'symposium-cs.fr')){
        $db_user = User::where('provider_id','=',$user->id);
        if (!($db_user->exists())){
            $new_user = User::create([
                'provider_id'=>$user->getId(),
                'name' => $user->name,
                'email'=>$user->email,
                'avatar'=>$user->avatar,
            ]);
            $new_user->save();
            $new_user->assignRole('gpa');
            Auth::login($new_user,true);
            $token_cache->storeTokens($token,$refresh,$expires);
            return redirect()->route('admin.index');
        } else {
            $db_user->first()->avatar = $user->avatar;
            $db_user = $db_user->first();
            $db_user->access_token = $token;
            $db_user->refresh_token = $refresh;
            $db_user->token_expires = $expires;
            $db_user->save();
            Auth::login($db_user,true);
            $token_cache->storeTokens($token,$refresh,$expires);
            return redirect()->route('admin.index');
        }
    } else {
        return redirect()->route('failed_domain');
    }
}

Когда я получаю данные: я проверяю, существует ли пользователь, чтобы узнать погоду, я должен создать его или просто войтиЭто.Затем я вручную авторизируюсь с помощью Auth :: login.Я проверяю переменную $ db_user с помощью dd, и это правильно.

Маршрут admin.index находится за промежуточным программным обеспечением auth.

Вот метод showLoginForm от LoginController

public function showLoginForm()
{
    if(Auth::guest()){
        return Socialite::driver('graph')->scopes(['openid','profile','offline_access','User.Read','Mail.Read'])->redirect();
    } else {
        return redirect()->route('admin.index');
    }
}

Спасибо за помощь мне ... Iпонятия не имею в чем проблема

...