gpt4 book ai didi

php - Laravel TestCase 不发送授权 header (JWT token )

转载 作者:可可西里 更新时间:2023-11-01 12:52:13 24 4
gpt4 key购买 nike

总结

我们正在编写单元测试来测试 JWT token 的创建和失效,并在每次我们尝试 JWTAuth::invalidate token 时从 JWTException 返回“无法从请求中解析 token ”错误。

描述

在我们的 Controller 中,为了创建用户 token ,我们传递用户电子邮件地址,然后返回 JWT token 。

之后,我们通过使用 invalidateToken 方法使 token 无效并通过发送授权 header 传递 token 来销毁 token 。

public function invalidateToken()
{
try {
JWTAuth::invalidate(JWTAuth::getToken());
return Response::json(['status' => 'success'], 200);
} catch (JWTException $e) {
return Response::json(['status' => 'error', 'message' => $e->getMessage()], 401);
}
}

这通过使用 Postman 和 PHPStorms Restful 客户端完美地工作。

当我们尝试为此方法编写测试时,我们会遇到错误响应和“无法从请求中解析 token ”错误消息。

我们的测试如下:

public function testInvalidateToken()
{
$createUserToken = $this->call('POST', '/token/create', ['email' => 'test@test.com']);
$user = $this->parseJson($createUserToken);

$response = $this->call('POST', '/token/invalidate',
[/* params */], [/* cookies */], [/* files */], ['HTTP_Authorization' => 'Bearer '.$user->token]);

// var_dump($user->token);
// die();

$data = $this->parseJson($response);
$this->assertEquals($data->status, 'success');
$this->assertEquals($data->status, '200');
}

我们正在使用 Laravel 5.1(它在服务器参数之前将 cookie 作为参数)

PHP 版本 5.6.10

PHPUnit 3.7.28

* 编辑 *已更新至 PHPUnit 4.7.6,但仍无法通过 Authorization header 发送。

* 解决方案 *
在我的 Controller __construct 方法中,我运行了这几行代码并解决了我的问题。

if ((\App::environment() == 'testing') && array_key_exists("HTTP_Authorization",  Request::server())) {
JWTAuth::setRequest(\Route::getCurrentRequest());
}

最佳答案

我在 Controller 构造函数中尝试了以下代码:

if (env('APP_ENV') == 'testing' 
&& array_key_exists("HTTP_AUTHORIZATION", request()->server())) {
JWTAuth::setRequest(\Route::getCurrentRequest());
}

关于php - Laravel TestCase 不发送授权 header (JWT token ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31309098/

24 4 0
文章推荐: php - Laravel 5 : Socket. 使用 Laravel session 数据的 io 客户端身份验证
文章推荐: html - 强制
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com