簡體   English   中英

Laravel-重定向經過身份驗證的用戶

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM