如何解决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 举报,一经查实,本站将立刻删除。