首页 文章

使用Laravel Auth中间件

提问于
浏览
8

Laravel 5.1真的有很少的文档..我需要清楚如何使用Auth middileware保护路由..

文档告诉添加“middleware”=>“auth”参数进行路由 . 或者可以做

public function __construct() 
    {
      $this->middleware('auth');
    }

但是如何使用Auth中间件进行实际用户身份验证并自动重定向到受保护路由/登录?

2 回答

  • 6

    在Kernel.php中 - 在受保护的$ routeMiddleware下有注册的中间件,如下所示:

    /**
     * The application's route middleware.
     *
     * @var array
     */
    protected $routeMiddleware = [
        'auth' => 'App\Http\Middleware\Authenticate',
        'auth.basic' => 'Illuminate\Auth\Middleware\AuthenticateWithBasicAuth',
        'guest' => 'App\Http\Middleware\RedirectIfAuthenticated',
    ];
    

    您可以看到使用App \ Http \ Middleware \ Authenticate注册'auth' .

    然后你可以按照这条路径 - 如果你打开 /app/Http/Middleware/Authenticate.php ,你会发现公共函数句柄:

    /**
         * Handle an incoming request.
         *
         * @param  \Illuminate\Http\Request  $request
         * @param  \Closure  $next
         * @return mixed
         */
        public function handle($request, Closure $next)
        {
            if ($this->auth->guest())
            {
                if ($request->ajax())
                {
                    return response('Unauthorized.', 401);
                }
                else
                {
                    return redirect()->guest('auth/login');
                }
            }
    
            return $next($request);
        }
    

    这里是管理重定向的地方,您可以根据自己的需要对其进行修改,也可以创建自定义中间件 .

    最后 - 因为它是在文档中编写的 - 在控制器中,需要进行身份验证,您将添加

    public function __construct() 
    {
      $this->middleware('auth');
    }
    

    如果提供的中间件不符合您的需求,您可以创建它 .

  • 10

    在laravel 5.2上,如果要隐藏注册表单或登录表单视图,则应使用中间件:

    $this->middleware('mymiddleware', ['only' => ['register', 'showRegistrationForm', 'login', 'showLoginForm']]);
    

    要么

    $this->middleware('mymiddleware', ['except' => ['register', 'showRegistrationForm', 'login', 'showLoginForm']]);
    

    这是因为注册和登录路由是AuthController上的post方法,而showXxxxForm是表单视图 .

    希望它能帮助任何人 .

相关问题