【问题标题】:php function verify token works in localhost but not on GoDaddy serverphp 函数验证令牌在 localhost 中有效,但在 GoDaddy 服务器上无效
【发布时间】: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


【解决方案1】:

最后。是 goDaddy 拯救了这一天。在我打开票并与他们交谈后,他们向我发送了以下消息: 关于您在站点上从请求中删除自定义 HTTP 标头时看到的问题,您遇到的问题实际上是由于 CGI 处理程序 Apache 配置为默认在 cPanel 上使用。出于安全原因,CGI 处理程序会删除未在 Apache 配置中显式注册的自定义标头条目。我们可以通过将站点使用的 PHP 处理程序从 CGI 更改为 PHP-FPM 来进一步验证这一点。 如果您...请随时通过电话或实时聊天联系我们的支持团队。

此致,

一切都会好起来的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-07-02
    • 2013-01-25
    • 2018-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-17
    • 2019-04-10
    相关资源
    最近更新 更多