如何从 django/react 标头访问令牌

问题描述 投票:0回答:1

在我的后端,我使用 set_cookie 设置我需要在前端访问的访问令牌。但我不能

我的后端使用 django

# Authentication successful
            access_token = AccessToken.for_user(user)
            refresh_token = RefreshToken.for_user(user)

            response = JsonResponse({'message': 'Login successful', 'tire_stock': tire_stock_data})

            # Set HTTP-only flag for both access and refresh tokens
            response.set_cookie('access_token', str(access_token), secure=True)
            response.set_cookie('refresh_token', str(refresh_token), httponly=True, secure=True)

            return response

我的前端使用react

const response = await axios.post(
        `${import.meta.env.VITE_URL}auth/login/`,
        { username: username, password: password },
        {
          headers: { "Content-Type": "application/json" },
          withCredentials: true,
        }
      );

响应头 在此输入图片描述

我尝试过response.headers['access_token'],它返回未定义,我也尝试过document.cookie,但不起作用。我在网上读到我需要公开标头才能访问它?不知道如何在 django 上做到这一点。 ChatGPT 说我不需要公开标头。我想在正文中传递令牌来解决这个问题,但这不是行业标准,因为令牌通常应该在标头中。所以我不知道该怎么做?我展示了相同的网站问题,以防其相关,我不认为这是因为在 Chrome 开发工具应用程序/cookie 上时我看到了那里的令牌,所以它们设置得很好? SameSite 会导致此问题吗?

reactjs django axios header token
1个回答
0
投票

如果我正确理解问题,你无法从JS访问令牌。

要允许它,您需要在settings.py中添加一个设置:

SESSION_COOKIE_HTTPONLY = False

更多这里: https://docs.djangoproject.com/en/5.0/ref/settings/#csrf-cookie-httponly

© www.soinside.com 2019 - 2024. All rights reserved.