[英]Laravel - Redirect authenticated users
在我的Laravel应用程序中,我有一个注册系统,该系统使用通过php artisan make:auth
创建的默认支架来注册新用户,但是登录后我想将用户带到另一个名为member-type
页面,以便他们可以选择哪种类型。他们想要成为的成员。
我利用了来自AuthenticatesUsers
protected function authenticated(Request $request, $user)
来检查用户是否已成功登录,然后检查是否设置了成员类型。
该方法如下所示:
/**
* The user has been authenticated.
*
* @param \Illuminate\Http\Request $request
* @param mixed $user
* @return mixed
*/
protected function authenticated(Request $request, $user)
{
Log::info("{$user->log_reference} logged in to their account with IP: {$request->getClientIp()}");
if(!$user->investor_type_selected){
// dd('I NOT SELECTED');
return redirect()->route('user.investor-type');
} elseif(!$user->member_type_selected){
dd('M NOT SELECTED');
return redirect()->route('user.member-type');
} else{
dd('BOTH SELECTED');
return redirect()->route('user.dashboard');
}
}
方法member_type_selected and
Investor_type_selected come from my
User`模型,它们看起来像这样:
/**
* Check whether this user has selected an investor type
*/
public function getInvestorTypeSelectedAttribute()
{
return !empty($this->investor_type) ? true : false;
}
/**
* Check whether this user has selected an investor type
*/
public function getMemberTypeSelectedAttribute()
{
return !empty($this->member_type) ? true : false;
}
很简单的东西。
转储和死亡在那里测试语句是否正在执行。
无论如何,我遇到的是中间件RedirectIfAuthenticated
,因为我正在使用自定义防护,所以看起来像这样:
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @param string|null $guard
* @return mixed
*/
public function handle($request, Closure $next, $guard = null)
{
switch ($guard) {
case 'admin':
if (Auth::guard($guard)->check()) {
return redirect()->route('admin.dashboard');
}
break;
default:
if (Auth::guard($guard)->check()) {
return redirect()->route('user.dashboard');
}
break;
}
return $next($request);
}
现在,一旦用户通过身份验证,它就会启动并使用authenticated
绕过我的重定向。 通常,我需要此中间件来确保用户返回其仪表板,但是有什么方法可以防止这种情况绕过我的重定向?
无需覆盖已authenticated
功能,请在您的RedirectIfAuthenticated
中间件中尝试
public function handle($request, Closure $next, $guard = null)
{
switch ($guard) {
case 'admin':
if (Auth::guard($guard)->check()) {
return redirect()->route('admin.dashboard');
}
break;
default:
if (Auth::guard($guard)->check()) {
$user = Auth::guard($guard)->user();
if(!$user->investor_type_selected){
return redirect()->route('user.investor-type');
} elseif(!$user->member_type_selected){
return redirect()->route('user.member-type');
} else{
return redirect()->route('user.dashboard');
}
}
break;
}
return $next($request);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.