django-allauth Google 登录不适用于 iOS

问题描述

我正在使用 django 构建 PWA,并且在使用 django-allauth Google 登录时遇到了这个问题。在装有 Chrome 和 Edge 的 Windows PC 上一切正常。但是当尝试在 iOS 设备上使用 Google 登录时,我收到社交网络登录失败,代码为:'unkNown',异常:'PermissionDenied()'

任何想法可能是什么原因或在哪里搜索它?

编辑

我尝试进行更多调试并得到这些错误(仅在 iOS 设备上!):

内部服务器错误:/accounts/google/login/callback/ Traceback (最近一次通话):文件 "/home/kava/.virtualenvs/django3/lib/python3.8/site-packages/allauth/socialaccount/providers/oauth2/views.py",第 141 行,调度中 login.state = SocialLogin.verify_and_unstash_state( 文件“/home/kava/.virtualenvs/django3/lib/python3.8/site-packages/allauth/socialaccount/models.py”,第 325 行,在 verify_and_unstash_state 中 提高 PermissionDenied() django.core.exceptions.PermissionDenied

解决方法

我设法解决了这个问题。

错误是由该函数中 if "socialaccount_state" not in request.session: 后面的行引起的:

@classmethod
def verify_and_unstash_state(cls,request,verifier):
    if "socialaccount_state" not in request.session:
        raise PermissionDenied()
    state,verifier2 = request.session.pop("socialaccount_state")
    if verifier != verifier2:
        raise PermissionDenied()
    return state

所以问题出在会话数据上,更准确地说,缺少“socialaccount_state”。

在谷歌搜索这个与 iOS 相关的问题后,我发现了 this 线程。

我按照那里的建议将 SESSION COOKIE_SAMESITECSRF_COOKIE_SAMESITE 更改为 None 并且它有效!

顺便说一句,如果“无”位于撇号之间,则它不适用于 iOS 12 设备。