Laravel手动登录似乎并不持久

时间:2019-02-26 12:31:02

标签: laravel api authentication manual

将laravel项目发送到生产环境似乎我无法再登录用户(它在本地运行)

我正在使用社交名目和图表(microsoft)记录我的用户。 唯一更改的是我添加了一个ssl证书来处理https(因为Microsoft Graph如果不是localhost,则只能在https上重定向)

问题是在Graph上重定向后,我登录,然后重定向返回到Graph(它在api上循环) 就在Auth :: login行之后(请参见下面的代码),我做了dd(Auth :: check())并得到了真,所以看起来好像身份验证已经完成,但不是持久性的,所以当我在仪表板上重定向时它会返回到图形登录页面。

我首先认为这可能是https的问题(https上的图形重定向,Laravel使用https会话而不是http登录),所以我在session.php中将安全性设置为false,但是仍然存在相同的问题。

这是我的代码: 授权重定向所达到的方法:

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手动登录。 我用dd检查$ db_user var,这是正确的。

“ admin.index”路由位于auth中间件后面。

这是LoginController中的showLoginForm方法

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');
    }
}

谢谢您的帮助...我不知道出什么问题了

0 个答案:

没有答案