Laravel 5.4:当用户登录时将用户重定向到他的帐户并尝试转到登录页面

Laravel 5.4: redirect user to his account when user is login and try to go to login page

我有 tree Auth guard(客户、供应商、管理员),这里是 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' );
                    }
                }

我在这里缺少什么?

Solution

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

Laravel(身份验证中间件)有两种类型的 auth guard,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