以上测试 错误 Unexpected control character found
如果在解码 JWT 时遇到 "Unexpected control character found" 错误,这通常是由于 token 格式不正确或包含非法字符。这种情况可能是因为在发送或接收 token 时,token 被不正确地处理或修改了。
解决步骤:
检查 Token 的格式:
确保在发送请求时,Authorization 头部正确设置了 token,并且格式是 Bearer。你可能需要在获取 token 之前添加一步来处理或验证这个格式。
清理和验证 Token:
在解码之前,验证 token 是否只包含有效的 Base64 字符,并且没有包含控制字符或空格。
调试输出:
在尝试解码前,打印出 token 看看是否有明显的格式问题。
示例代码:
在 decodeJWT 方法中添加一些验证和格式化步骤:
public function decodeJWT(Request $request)
{
$authHeader = $request->header('Authorization');
if (preg_match('/Bearer\s(\S+)/', $authHeader, $matches)) {
$token = $matches[1];
} else {
return $this->cb(null, false, "Token not found or invalid format");
}
$key = 'shuke'; // 使用与生成 token 相同的密钥
try {
$decoded = JWT::decode($token, new Key($key, 'HS256'));
return $this->cb($decoded);
} catch (\Exception $e) {
return $this->cb(null, false, $e->getMessage());
}
}
这段代码首先检查 Authorization 头是否包含 Bearer 标记,并从中提取 token。如果格式不正确,它将返回一个错误消息。这可以帮助确保传递给 JWT::decode 的 token 是干净且格式正确的。