代码之家  ›  专栏  ›  技术社区  ›  Jesse Orange

Laravel-重定向已验证用户

  •  0
  • Jesse Orange  · 技术社区  · 6 年前

    在我的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 已选择投资者类型 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;
    }
    

    很简单的东西。

    dump和die在那里测试语句是否正在执行。

    不管怎样,我的问题是中间件 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 . 我通常需要这个中间件来确保用户返回到他们的仪表板,但是有没有一种方法可以防止这种情况绕过我的重定向?

    1 回复  |  直到 6 年前
        1
  •  1
  •   Saurabh Mistry    6 年前

    无需覆盖 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);
    }
    
    推荐文章