如何在 laravel 中从 google 驱动器重定向

How to redirect from google drive in laravel

我在我的项目中使用 google 驱动器通过 google 登录。

它对我来说工作正常,但问题是当用户 select 发送电子邮件时,在回调方法中用户必须重定向到 '/',但用户将重定向到 home,这是回调方法:

public function callback(Request $request)
{
    $googleUser = Socialite::driver('google')->stateless()->user();
    $user = User::where('email', $googleUser->email)->first();

    if (!$user) {
        $user = User::create([
            'name' => $googleUser->name,
            'email' => $googleUser->email,
            'password' => bcrypt(\Str::random(16))
        ]);
    }

    auth()->loginUsingId($user->id);

    return $this->loggedIn($request, $user) ?: redirect(route('login'));
}

下次用户使用 google 登录没问题,但第一次重定向到 home

并且在 loggedIn 函数中第一次返回 false 因为 two_factor_type 默认关闭 :

public function loggedIn(Request $request, $user)
{
    if ($user->two_factor_type === 'on') {
        auth()->logout();

        $request->session()->flash('auth', [
            'user_id' => $user->id,
            'remember' => $request->has('remember')
        ]);

        if ($user->two_factor_type === 'on') {
            $code = ActiveCode::generateCode($user);
            //TODO send sms
        }

        return redirect(route('login.twoFactor'));

    }

    return false;
}

即使在我的 LoginControllerRegisterController 中,我也更改了这个:

protected $redirectTo = RouteServiceProvider::HOME;

对此:

protected $redirectTo = '/';

那么为什么它会重定向到 home

请检查路由文件,也许在路由文件中,您的“/”路径将 return 主页视图如下所示...

Route::get('/', function () 
{
    return view('welcome');
});

所以请尝试根据您的需要进行更改。

或者请从您的回调函数中删除以下行

return $this->loggedIn($request, $user)

app/Http/Controllers/Auth/LoginController中检查控制器是否受中间件保护,例如:

public function __construct()
{
    $this->middleware('guest')->except('logout');
    //meaning if there is user authenticated not guest,
    //when he hit function other than logout()
    //will be redirected to default landing, in code below
}

in app/Http/Middleware/RedirectIfAuthenticated 将检查当前是否 auth()->user() is authenticated

将默认代码更改为:

public function handle($request, Closure $next, $guard = null)
{
    if (Auth::guard($guard)->check()) {
        return redirect('/home'); // here change the default redirected
    }

    return $next($request);
}