reactjs 为什么在Django React中即使在服务器端也无法注销

g0czyy6m  于 2023-05-17  发布在  React
关注(0)|答案(1)|浏览(99)

我是Django和React的新手,我试图创建auth系统。注册和登录在服务器端和客户端都工作正常,但注销一个没有。当我从React发送POST方法时,它说“**POST http://127.0.0.1:8000/user/logout 403(Forbidden)”**即使它在Django中工作
这是我在Django中的UserLogOutView

class UserLogOutView(APIView):
    def post(self, request):
        logout(request)
        return Response(status=status.HTTP_200_OK)

然后是urls.py

urlpatterns = [
    ...
    path('logout', views.UserLogOutView.as_view(), name='logout'),
]

接下来,我在react组件中通过axios发送POST方法。

const submitLogout = () => {
    axios
      .post(
        "http://127.0.0.1:8000/user/logout",
      )
      .then(response => {
        console.log(response);
      })
      .catch(error => {
        console.log(error);
      });
  }

  const handleClickLogOut = (e) => {
    e.preventDefault();    
    submitLogout();
    props.onClose(false);
  };

像这样使用它。

<form onSubmit={e => handleClickLogOut(e)}>
        <button className='font-bold text-[20px]'>Log Out</button>
</form>

我还在该文件的Axios标头中设置了CSRF令牌。

axios.defaults.xsrfCookieName = 'csrftoken';
axios.defaults.xsrfHeaderName = 'X-CSRFToken';
axios.defaults.withCredentials = true;

有什么建议吗?

t3psigkw

t3psigkw1#

我查看响应,结果显示**{“detail”:“CSRF Failed:来源检查失败-http://127.0.0.1:3000不匹配任何可信来源。"}**
所以,我试着在www.example.com中添加这个setting.py,现在它工作了。

CSRF_TRUSTED_ORIGINS = [
    'http://localhost:3000',
    'http://127.0.0.1:3000',
]

相关问题