我正在用 django 实现一个身份验证系统并做出反应。这两个应用程序分别运行在 8000、3000 端口上。我已经使用 Djoser 包实现了身份验证系统。这个包使用了一些依赖项 social_core 和 social_django。一切似乎都配置好了。我单击登录 google 按钮...我被重定向到 google 登录页面,然后返回到端口 3000 上的前端反应应用程序,并带有url 上的状态和代码参数。
此时我将这些参数发布到后端。后端尝试使用以下代码(social_core/backends/oauth.py)验证状态,检查会话存储中是否存在状态键
def validate_state(self):
"""Validate state value. Raises exception on error, returns state
value if valid."""
if not self.STATE_PARAMETER and not self.REDIRECT_STATE:
return None
state = self.get_session_state()
request_state = self.get_request_state()
if not request_state:
raise AuthMissingParameter(self, 'state')
elif not state:
raise AuthStateMissing(self, 'state')
elif not constant_time_compare(request_state, state):
raise AuthStateForbidden(self)
else:
return state
此时由于某些原因,状态会话密钥不存在。我收到一条错误消息,指出在会话数据中找不到状态(以下错误)
{"error":["State could not be found in server-side session data."],"status_code":400}
我回顾了我所做的所有行动:
- 给定提供者 google-oauth2 一个重定向 url 来生成后端的前端请求。通过此操作,还会生成 url,状态键存储在具有特定值 (google-oauth2_state) 的会话中。
- 前端接收 url 并重定向到 google auth 页面。
- 使用 google 进行身份验证并使用 url 上的状态和代码参数重定向回前端。
- 前端获取数据形式的url,将数据post到后端,验证接收到的状态是否与点(1)上生成的状态相同。
由于某些原因,状态代码没有保留......任何想法和帮助将不胜感激。
谢谢大家。