如何在 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;
}
即使在我的 LoginController 或 RegisterController 中,我也更改了这个:
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);
}
我在我的项目中使用 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;
}
即使在我的 LoginController 或 RegisterController 中,我也更改了这个:
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);
}