为了账号安全,请及时绑定邮箱和手机立即绑定

php laravel中auth自动生成的登录页源码有一处不懂(中间件)

php laravel中auth自动生成的登录页源码有一处不懂(中间件)

PHP
EnzoLiu 2017-01-13 03:26:25
我用 php artisan make:auth生成了一个登录注册的模块我分析源码的时候 发现 app\Http\Controllers\Auth\LoginController.php内存在这样一段代码:    public function __construct()     {         $this->middleware('guest', ['except' => 'logout']);     }我看到$this->middleware代码后先是一愣...  后来在网上找到资料原来这是使用了一个中间件但我对后面的['except' => 'logout']); 实在不懂,寻求大神给予讲解一下。另外:except是源码里自己定义的 还是laravel自带的?
查看完整描述

2 回答

已采纳
?
流逝在指尖活在当下

TA贡献4条经验 获得超1个赞

这个是laravel框架里面自带的,中间件就是控制用户是否能访问的一种机制。

在文件 vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php 77行

    /**
     * Determine if the given options exclude a particular method.
     *
     * @param  string  $method
     * @param  array  $options
     * @return bool
     */
    protected static function methodExcludedByOptions($method, array $options)
    {
        return (isset($options['only']) && ! in_array($method, (array) $options['only'])) ||
            (! empty($options['except']) && in_array($method, (array) $options['except']));
    }
  • 在Controller设置中间件的时候可以设置: only 针对某个方法添加中间件,或者 except 除了这个方法之外的方法都添加中间件

methodExcludedByOptions 方法是判断是否在这个方法中使用中间件,返回值是布尔值 true使用中间件,false不使用中间件


排除特定的方法不使用中间件

$this->middleware('guest:admin', ['except' => 'login']);

在指定的方法中使用中间件

$this->middleware('guest:admin', ['except' => 'logout']);

推荐将中间件写在路由中

Route::get('logout', 'AuthController@logout')->middleware('auth:admin');


查看完整回答
反对 回复 2017-01-17
?
慕先生7847717

TA贡献1条经验 获得超0个赞

出去,退出登录这个请求不需要,验证

查看完整回答
反对 回复 2017-08-27
  • 2 回答
  • 0 关注
  • 4602 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信