问题描述
我正在使用 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_SAMESITE 和 CSRF_COOKIE_SAMESITE 更改为 None 并且它有效!
顺便说一句,如果“无”位于撇号之间,则它不适用于 iOS 12 设备。