0

我正在使用带有 Simple JWT 的 Django REST 框架。我正在尝试创建一个用户注册页面。目前,我收到此错误

禁止 (403) CSRF 验证失败。请求中止。

失败原因:CSRF 令牌丢失或不正确。

完整的错误信息在这里:错误信息

在 settings.py 下,我添加了以下内容:

REST_FRAMEWORK = {
    'DEFAULT_PERMISSION_CLASSES' : ('rest_framework.permissions.IsAuthenticated',),
'DEFAULT_AUTHENTICATION_CLASSES': ('rest_framework_simplejwt.authentication.JWTAuthentication',),

}

我的项目网址文件夹:

urlpatterns = [
    path('admin/', admin.site.urls),
    path("", include("my_api.urls")),
    path('api-auth/', include('rest_framework.urls')),
    path('api/token', TokenObtainPairView.as_view()),
    path('api/token/refresh', TokenRefreshView.as_view()),
]

这是我的注册端点的应用程序视图。

def register(request):
    if request.method == "POST":
        email = request.POST["email"]

        # Ensure password matches confirmation
        password = request.POST["password"]
        confirmation = request.POST["confirmation"]
        if password != confirmation:
            return render(request, "my_api/register.html", {
                "message": "Passwords must match."
            })

        # Attempt to create new user
        try:
            # Creates a hashed password. 
            #password = make_password(password)
            user = User.objects.create_user(username=email, email=email, password=password)
            user.save()
        except IntegrityError as e:
            print(e)
            return render(request, "my_api/register.html", {
                "message": "Email address already taken."
            })
        login(request, user)
        return HttpResponse("Successfully created account.")
    else:
        return render(request, "my_api/register.html")
4

1 回答 1

0

在我的情况下导致错误的原因是我试图http://localhost:8000/jwt/create在我的端点开始时让用户使用auth/所以它应该是http://localhost:8000/auth/jwt/create或者在你的情况下它应该是

http://localhost:8000api/token/jwt/create

我写它时认为其他一些用户可能有同样的问题。

于 2021-08-29T12:36:08.687 回答