gpt4 book ai didi

reactjs - Django, Djoser 社交身份验证 : State could not be found in server-side session data. status_code 400

转载 作者:行者123 更新时间:2023-12-03 20:44:43 28 4
gpt4 key购买 nike

我正在使用 django 和 react 实现身份验证系统。这两个应用程序分别运行在端口 8000、3000 上。我已经使用 Djoser 包实现了身份验证系统。这个包使用了一些依赖项 social_core 和 social_django。一切似乎都配置好了。我点击登录谷歌按钮...我被重定向到谷歌登录页面,然后回到我的前端 react 应用程序在端口 3000 与 状态 代码 参数在 url 上。
在这一点上,我将这些参数发布到后端。后端尝试使用以下代码(social_core/backends/oauth.py)验证状态,检查状态 key 是否存在于 session 存储中

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
此时由于某些原因状态 session key 不存在..并且我收到一条错误消息,指出在 session 数据中找不到状态(下面的错误)
{"error":["State could not be found in server-side session data."],"status_code":400}
我回顾一下我所做的所有行动:
  • 前端请求后端生成给定提供者 google-oauth2 重定向 URL。通过此操作,生成的 url 也会将状态 key 存储在具有特定值 ( google-oauth2_state ) 的 session 中。
  • 前端接收 url 并重定向到 google auth 页面。
  • 使用 google 进行身份验证,并使用 url 上的状态和代码参数重定向回前端。
  • 前端获取数据表单url并将数据发布到后端以验证接收到的状态等于点(1)上生成的状态。

  • 由于某些原因,状态代码没有保留......任何想法和帮助将不胜感激。
    谢谢大家。

    最佳答案

    没有必要的详细信息,我只能说出两个可能的原因:

  • 您使用不正确的 session 操作覆盖了后端(或者用户在身份验证完成之前已注销)。
  • 前端使用了错误的state参数

  • 您可以在没有前端的情况下测试社交登录,假设您尝试使用 Google 登录:
  • 在浏览器中输入社交登录 URL,如 domain.com:8000/login/google-oauth2/
  • 授权
  • 查看页面是否正确重定向到您的默认登录页面

  • 如果是,那么您可能需要检查您的前端代码,如果不是,则检查您的后端代码。
    最后,如果您对潜在风险不那么敏感,您还可以按如下方式覆盖 GoogleOAuth2 类以禁用状态检查:
    from social_core.backends import google

    class GoogleOAuth2(google.GoogleOAuth2):
    STATE_PARAMETER = False

    关于reactjs - Django, Djoser 社交身份验证 : State could not be found in server-side session data. status_code 400,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66205017/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com