php - 授权 header 未通过 Codeception API 测试

标签 php laravel authorization codeception bearer-token

我正在尝试使用 Codeception 测试我的 Laravel 4 REST API,但是当我尝试通过我的授权 header 发送时(使用 REST 模块的 $I->amBearerAuthenticated() 函数)它没有通过到最终请求。

据我所知,Symfony2 BrowserKit 模块修改了添加到 HTTP_XXX_XXX 格式中的任何 header ,因此发送的 header 似乎是 HTTP_AUTHORIZATION - 然而,当我在我的应用程序中输出接收到的 header 时,授权和 HTTP_AUTHORIZATION 都不存在.

如果有帮助,这是我的 Codeception 测试:

public function loginAndHitProtectedPage(ApiTester $I)
{
    $I->wantTo('login and successfully get to a protected page');
    $I->sendPOST('/auth/login', ['username' => 'user1', 'password' => 'pass']);
    $I->seeResponseIsJson();
    $token = $I->grabDataFromJsonResponse('token');
    $I->amBearerAuthenticated($token);
    $I->sendGET('/runs');
    $I->seeResponseCodeIs(200);
    $I->seeResponseIsJson();
    $I->dontSeeResponseContains('error');
}

根据 BrowserKit 发送的 header (REST 模块中 $this->client->getInternalRequest()->getServer() 的输出):

HTTP_HOST   :   localhost
HTTP_USER_AGENT :   Symfony2 BrowserKit
HTTP_AUTHORIZATION  :   Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOlwvXC9sb2NhbGhvc3RcL2F1dGhcL2xvZ2luIiwic3ViIjoxLCJpYXQiOjE0MjE3ODY0NDEsImV4cCI6MTQyMTg3Mjg0MX0.XxxxZMe8gwF9GS8CdKsh5coNQer1c6G6prK05QJEmDQ     
HTTP_REFERER    :   http://localhost/auth/login 
HTTPS   :   false

根据 PHP 接收的 header :

Accept:          text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Charset:  ISO-8859-1,utf-8;q=0.7,*;q=0.7
Accept-Language: en-us,en;q=0.5
Content-Type:    application/x-www-form-urlencoded
Host:            localhost
Referer:         http://localhost/auth/login
User-Agent:      Symfony2 BrowserKit

token 已正确接收,但我的 API(正确)在 GET 请求上返回 401,因为它没有收到 token 。

如有任何帮助,我们将不胜感激!

最佳答案

我正在使用 Laravel 5(与 L4 没有太大区别)和 REST 模块。这就是我现在正在做的方式:

protected $token;
public function _before(ApiTester $I)
{
    $user = TestDummy(...);
    $I->sendPOST('/v1/auth/login', [
      'email' => $user->email, 
      'password' => $user->password
    ]);
    $this->token = $I->grabDataFromResponseByJsonPath('$.token');
}

然后在我的测试中:

// Do stuff ...
$I->amBearerAuthenticated($this->token[0]);
// Do more stuff ...

我确信有更好的方法可以做到这一点,但在我找到更好的方法之前,这是行之有效的。

关于php - 授权 header 未通过 Codeception API 测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28055181/

相关文章:

Laravel 缓存剩余 TTL

laravel - 过滤分页的 Eloquent 集合

ios - "The app must ask for a basic read permission at install time"

php - Ruby httparty 发布请求

php - 如何在 PHP 中使用 gettext?

php - 仅在控制台上拒绝 root@localhost 的 Laravel Artisan 访问

asp.net-core - ASP.NET Core Controller 无法注册到授权包

asp.net - 在 ASP.NET MVC 2 中从授权中排除操作

php - 停止在 div 内的表中滚动表标题 <th>

php - 如何表示文件上传的时基进度条