繁体   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