文件
mashangyoujiu/_ai_archive/scripts/test_token_extraction.php

92 行
2.8 KiB
PHP

<?php
/**
* 测试token提取功能
*/
// 模拟不同的HTTP头格式
$testCases = [
'Authorization: Bearer 4187d077ba6ba7b654075a16e615fac0',
'authorization: Bearer 4187d077ba6ba7b654075a16e615fac0',
'AUTHORIZATION: Bearer 4187d077ba6ba7b654075a16e615fac0',
'Token: 4187d077ba6ba7b654075a16e615fac0',
'token: 4187d077ba6ba7b654075a16e615fac0',
];
// 模拟BaseController的token获取逻辑
function testTokenExtraction($headers) {
$token = '';
// 大小写不敏感的头部查找
$authHeader = '';
foreach ($headers as $key => $value) {
if (strtolower($key) === 'token') {
$token = $value;
break;
} elseif (strtolower($key) === 'authorization') {
$authHeader = $value;
}
}
// 如果没有找到Token头,处理Authorization头
if (empty($token) && !empty($authHeader)) {
// 支持Bearer token格式
if (strpos($authHeader, 'Bearer ') === 0) {
$token = substr($authHeader, 7);
} elseif (strpos($authHeader, 'bearer ') === 0) {
$token = substr($authHeader, 7);
}
}
return $token;
}
// 模拟getAllHeaders的不同输出格式
function simulateGetAllHeaders($headerString) {
$parts = explode(': ', $headerString);
if (count($parts) === 2) {
return [$parts[0] => $parts[1]];
}
return [];
}
echo "=== Token提取测试 ===\n\n";
foreach ($testCases as $index => $testCase) {
echo "测试案例 " . ($index + 1) . ": $testCase\n";
$headers = simulateGetAllHeaders($testCase);
$extractedToken = testTokenExtraction($headers);
echo "提取的token: " . ($extractedToken ?: '(空)') . "\n";
echo "是否成功: " . ($extractedToken === '4187d077ba6ba7b654075a16e615fac0' ? '✅' : '❌') . "\n";
echo "---\n";
}
// 测试实际的HTTP环境
echo "\n=== 实际HTTP环境测试 ===\n";
// 模拟$_SERVER环境
$_SERVER['HTTP_AUTHORIZATION'] = 'Bearer 4187d077ba6ba7b654075a16e615fac0';
// 模拟getAllHeaders函数不存在的情况
function testGetAllHeadersFromServer() {
$headers = array();
foreach ($_SERVER as $key => $value) {
if (strpos($key, 'HTTP_') === 0) {
$header = str_replace('_', '-', substr($key, 5));
$header = ucwords(strtolower($header), '-');
$headers[$header] = $value;
}
}
return $headers;
}
$serverHeaders = testGetAllHeadersFromServer();
echo "从\$_SERVER提取的headers: " . json_encode($serverHeaders, JSON_UNESCAPED_UNICODE) . "\n";
$finalToken = testTokenExtraction($serverHeaders);
echo "最终提取的token: " . ($finalToken ?: '(空)') . "\n";
echo "测试结果: " . ($finalToken === '4187d077ba6ba7b654075a16e615fac0' ? '✅ 成功' : '❌ 失败') . "\n";
?>