Laravel 5.4:在用户登录时将用户重定向到他的帐户,然后尝试转到登录页面

时间:2018-11-13 10:52:17

标签: php laravel authentication laravel-5.4

我有身份验证树(客户,供应商,管理员),这是RedirectIfAuthenticated.php的样子

public function handle( $request, Closure $next, $guard = null ) {
        switch ( $guard ) {
            case 'supplier':
                {
                    if ( Auth::guard( $guard )->check() ) {
                        return redirect()->route( 'supplier-dashboard' );
                    }
                    break;
                }
            case 'admin':
                {
                    if ( Auth::guard( $guard )->check() ) {
                        return redirect()->route( 'admin-dashboard' );
                    }
                    break;
                }

            default :
                {
                    if ( Auth::guard( $guard )->check() ) {
                        return redirect( '/my-account' );
                    }
                }
        }

        return $next( $request );
    }

当我以供应商或管理员身份登录并尝试进入登录页面时,它将带我到右边的route

但是遇到客户时,我将我带到登录页面,这是错误的,因为我定义了重定向到/my-account的默认情况

default :
                {
                    if ( Auth::guard( $guard )->check() ) {
                        return redirect( '/my-account' );
                    }
                }

我在这里想念什么?

  

解决方案

正如@BilalAhmed所建议的那样,我调试了( Auth::guard( $guard )->check() )的返回值,结果是false,然后尝试了( Auth::guard( 'web' )->check() ),这对我来说很好。

1 个答案:

答案 0 :(得分:0)

Laravel(身份验证中间件)具有两种类型的身份验证保护,webapi。为了实现自定义,您必须在protected $guard = 'customer';

这样的身份验证模型中进行定义

默认情况下,laravel像web一样使用Auth::guard('web')->user()。它类似于Auth::user()。您还可以检查config/auth.php文件中的默认防护

执行此行if ( Auth::guard( $guard )->check() )时的意思是Auth::guard( 'customer' )->check(),但在auth.php文件中没有定义客户保护措施

如果要创建自定义防护,请阅读this articles