【问题标题】:Problem in my test function trying to access group of routes我的测试功能中的问题试图访问路由组
【发布时间】:2019-11-22 04:28:40
【问题描述】:

我要测试的是访问一些路由,但是这些路由在 laratrust 角色中间件中这个角色是 auth 用户必须是超级管理员才能进入这个路由我的问题是我不知道如何写这个功能。

我试图在这样的测试功能中让用户超级管理员

public function  Test()
{
    $user = factory(User::class)->create();
    $user->attachRole('superadministrator');
    $this->actingAs($user, 'api');

    $response = $this->json('GET', 'api/users');
    $response->assertStatus(200);
}

但是即使我检查了这个用户是超级管理员的数据库并且测试给出的结果就像我不是超级管理员一样,它也没有用

这是我的 api 路由:

Route::group(['middleware' => ['auth:api', 'role:superadministrator']],
function()
{
    Route::apiResource('users', 'UserController');
}

这是我在 UserController 中的索引函数:

public function index()
{
    return Response()->json(User::all, 200);
}

我期望的是一个函数可以访问这个路由,因为这个组中有更多的路由,其余的测试依赖于这个函数

【问题讨论】:

    标签: php laravel laravel-passport laravel-middleware


    【解决方案1】:

    我从未使用过 Laratrust,但在快速查看其源代码后,问题似乎是您需要在 role 中间件检查中指定 api 保护。将,guard:api 添加到您的role 中间件:

    Route::group(['middleware' => ['auth:api', 'role:superadministrator,guard:api']], function() {
        Route::apiResource('users', 'UserController');
    }
    

    role 中间件检查中,如果您不指定保护,它将使用您的身份验证配置中定义的默认保护(如果您没有更改,则为web)。因此,中间件将从不存在的web auth 保护中寻找用户。

    好消息是,您的测试成功了!它在您的路由定义中发现了一个错误。

    【讨论】:

    • web 中的守卫是默认的,api 是护照,并且中间件在我尝试时工作得很好,但我想但正在测试中
    • @ObitoPoseidon "当我尝试时,中间件工作得很好":如果你登录到前端并使用来自 CreateFreshApiToken 中间件的临时令牌访问路由,那将工作得很好,因为您的web 守卫和您的api 守卫都具有相同的用户。但是,在您的测试中,您只将用户分配给api 守卫。您的 auth 中间件将通过,但您的 role 中间件将失败,因为它仅检查 web 防护。由于您的路由仅限于 api 防护 (auth:api),因此您确实应该将 api 防护添加到您的 role 中间件。
    • 好的,我该怎么做,我的 gaurds 看起来像这个 web => [ 'driver' => 'session' , 'provider'=> 'user' ] api => [ 'driver' = > 'passport' , 'provider' => 'users' , 'hash' => false ]
    • @ObitoPoseidon 这在我的回答中。你的中间件应该是'role:superadministrator,guard:api'
    • @ObitoPoseidon 在文档中,在Usage > Middleware > Concepts的最后一段中提到了
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-10
    相关资源
    最近更新 更多