【发布时间】:2021-02-15 23:45:05
【问题描述】:
我有一个 php 函数,它应该验证是否有令牌,如果有,则显示一些信息。当我在 localhost 中使用 xampp 时,该功能工作正常。当我在服务器上的 prod 中执行此操作时,它给了我一个“令牌未定义”错误,即使我可以在开发工具中看到该令牌。什么可能导致错误? 我的php函数
public function viewCompanies()
{
if (isset($GLOBALS['headers']['Authorization'])) {
print_r($GLOBALS['headers']['Authorization']);
if ($id = $this->VerifyUserToken($GLOBALS['headers']['Authorization'], $_SERVER['REMOTE_ADDR'])) {
$companies = $this->currentModel->viewCompanies();
if ($companies) {
echo json_encode($companies);
} else {
echo json_encode(['success' => false]);
}
}
else {
echo json_encode(['success' => false, 'error' => "invalid token"]);
}
} else {
echo json_encode(['success' => false, 'error' => "token undefined"]);
}
}
verifyUserToken 函数
public function verifyUserToken($token, $ip) {
$db = new Database();
$db->query('SELECT * FROM auth WHERE token = :token AND expiry >now()');
$db->bind(':token', $token);
//check database if token exists and is not expired
if($res = $db->single()) {
// checks if token matches to ip address
// returns user or contact id if verified else returns false
if($res->token === $token && $res->ip === $ip) {
$this->cleanTokens();
if($res->user_id >0) {
return $res->user_id;
}
//
} else {
return false;
}
} else {
return false;
}
}
我查了数据库,令牌明显在那里
我在 Postman 上测试了这个函数,我得到了相同的令牌未定义错误。如果我应该添加任何其他信息,请告诉我。我不知道如何调试。
【问题讨论】:
-
您说“我可以在开发工具中看到令牌”,但这正是浏览器发送的内容。 IE 你应该检查服务器接收的内容,尝试 print_r 或返回 $GLOBALS['headers']['Authorization'] 和 $_SERVER['REMOTE_ADDR']
标签: php authentication oauth-2.0