测试Laravel护照

时间:2018-04-13 09:25:20

标签: php laravel-5 phpunit laravel-passport

我的OAuth2上有Auth代理。使用以下代码:

public function retrieveToken($username, $password, $scopes = ''){
    // ...
    $client = new Client();
    $result = $client->post(url('/oauth/token'),[
        'form_params' => [
            'grant_type' => 'password',
            'client_id' => "CLIENT_ID",
            'client_secret' => "SECRET",
            'username' => $username,
            'password' => $password,
            'scope' => $scopes
        ],
        'timeout' => 5,
        "http_errors" => true,
    ]);
    // ...
}

我想测试一下这个方法。在这种情况下,我在数据库事务中创建用户。并调用我的auth端点,它使用auth proxy将请求重定向到OAuth2。

 use DatabaseTransactions;
 // ...
 public function login(){
        $user = factory(User::class)->create();

        $response = $this->post('/login',[
            "username" => $user->email,
            "password" => "secret",
        ]);

        $response
            ->assertSuccessful();
}

但每次我收到401错误,因为我的用户对OAuth2不可见。对于存在于数据库中的用户,它正在工作,但在事务中却没有。

这个问题有什么解决方案吗?或者任何想法它为什么这样工作?

1 个答案:

答案 0 :(得分:1)

Laravel有一个帮助程序来测试名为actingAs的身份验证:

  

您还可以通过将保护名称作为第二个参数传递给actsAs方法来指定应该使用哪个保护来验证给定用户:

$this->actingAs($user, 'api')
关于测试API和身份验证的

Documentation here