为什么我的页面请求需要身份验证?

时间:2015-10-16 18:13:52

标签: php laravel authentication laravel-5.1

我的问题是:
通过ArticlesController@index功能进行调用的博客主页 通过ArticlesController@show函数调用的各个博客帖子页面和
评论表格将嵌入到将发布到blog/{blog}/comment并将调用CommentsController@store方法

的各个博客帖子页面中

我在routes.php文件中定义了以下关注路径:

Route::resource     ('blog',                    'ArticlesController');

Route::resource     ('blog/{blog}/comment',     'CommentsController');

ArticlesController设置为除authindex()以外的所有功能调用show($id)中间件:

public function __construct()
{
    $this->middleware('auth', ['except' => 'index', 'show']);
}

当我尝试访问单个博客帖子页面而没有评论表单时,它按预期工作,并允许我访问主页和单个帖子页面而无需身份验证。

当我将评论表单嵌入到各个帖子页面时,它允许我访问主页,但要求我在访问各个帖子页面之前进行身份验证。

即使我的CommentsController是一个单独的实体并且它没有调用auth中间件,有人能告诉我它为什么会这样吗?

1 个答案:

答案 0 :(得分:2)

except参数应该是一个数组

public function __construct()
{
    $this->middleware('auth', ['except' => ['index', 'show']]);
}

每条评论更新

如果您正在寻找数组,请查看code中间件方法。

/**
 * Register middleware on the controller.
 *
 * @param  string  $middleware
 * @param  array   $options
 * @return void
 */
public function middleware($middleware, array $options = [])
{
    $this->middleware[$middleware] = $options;
}

至于为何之前有效,谁知道呢。我想,在Laravel将字符串转换为数组的方法链中的某个点,这就是它工作的原因。

您可能需要考虑为控制器编写test。这样你就不会依赖它的工作方式。你知道它的工作方式与你的预期相符,你所做的一切都不会改变预期的结果。