在我的Laravel应用程序中,我有一个注册系统,该系统使用通过php artisan make:auth
创建的默认支架来注册新用户,但是登录后,我希望将用户带到另一个名为member-type
的页面,以便他们可以选择想要成为哪种类型的成员。
我利用protected function authenticated(Request $request, $user)
中的AuthenticatesUsers
来检查用户是否已成功登录,然后检查是否设置了成员类型。
方法如下:
/**
* 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
用户模型的方法如下:
/**
* 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
进行的重定向。通常,我需要此中间件来确保用户返回其仪表板,但是有什么方法可以防止这种情况绕过我的重定向?
答案 0 :(得分:1)
无需覆盖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);
}