微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

knpuniversity / oauth2-client-bundle - 无效状态

如何解决knpuniversity / oauth2-client-bundle - 无效状态

首先,我为我的英语感到抱歉。 我有一个 symfony 5.1 应用程序,在 Ubuntu 18.04 下有 PHP7.4-fpm、apache2.4、MysqL 5.7(开发和生产的堆栈相同)。 我使用 knpuniversity/oauth2-client-bundle 进行谷歌登录。 在我的开发环境中,身份验证适用于 pc、mac、android、iOS 上的所有主浏览器。 在我的 prod 环境中,身份验证适用于所有主浏览器,但仅适用于 pc、mac 和 android。如果我将 iOS(iPad 和 iPhone)与任何浏览器(safari、chrome、firefox)一起使用,身份验证将失败并出现以下异常

“回调 URL 中传递的状态参数无效”。

问题似乎在这里

“供应商/knpuniversity/oauth2-client-bundle/src/Client/oauth2client.PHP

/**
 * Call this after the user is redirected back to get the access token.
 *
 * @param array $options Additional options that should be passed to the getAccesstoken() of the underlying provider
 *
 * @return Accesstoken|\League\OAuth2\Client\Token\AccesstokenInterface
 *
 * @throws InvalidStateException
 * @throws MissingAuthorizationCodeException
 * @throws IdentityProviderException         If token cannot be fetched
 */
public function getAccesstoken(array $options = [])
{
    if (!$this->isstateless()) {
        $expectedState = $this->getSession()->get(self::OAUTH2_SESSION_STATE_KEY);
        $actualState = $this->getCurrentRequest()->get('state');
        if (!$actualState || ($actualState !== $expectedState)) {
            throw new InvalidStateException('Invalid state');
        }
    }

    $code = $this->getCurrentRequest()->get('code');

    if (!$code) {
        throw new MissingAuthorizationCodeException('No "code" parameter was found (usually this is a query parameter)!');
    }

    return $this->provider->getAccesstoken(
        'authorization_code',array_merge(['code' => $code],$options)
    );
}

由于某种原因会话为 NULL,所以“$expectedState”也是 NULL。 我重复一遍,该问题仅在生产 vps 上出现在 iPad/iPhone(具有不同的浏览器和不同的 iOS 版本)上。 我也尝试过使用新的 vps,但错误仍然存​​在。
我尝试将 Symfony env 设置为 prod 在我的开发电脑上,一切正常。

我快疯了。 有人可以帮助我吗?

谢谢

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。