[英]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.