0

我正在使用 django rest 框架和 vue 创建一个电子商务应用程序,我正在使用 djoser.authtoken 来处理身份验证。

我可以成功地创建一个带有发布请求的用户,/users/但是每当我尝试登录时,我都会不断地进入xhr.js:177 POST http://127.0.0.1:8000/api/v1/token/login/ 400 (Bad Request)控制台和[22/May/2021 03:06:11] "POST /api/v1/token/login/ HTTP/1.1" 400 68服务器。

错误消息没有提供任何有用的信息,但这里是我的代码的一些相关片段:

# myproject/urls.py

from django.contrib import admin
from django.conf import settings
from django.conf.urls.static import static
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('api/v1/', include('djoser.urls')),
    path('api/v1/', include('djoser.urls.authtoken')),
    path('api/v1/', include('product.urls')),
] 


urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

# myproject/settings.py
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',

    'rest_framework',
    'rest_framework.authtoken',
    'corsheaders',
    'djoser',

    'product',
]


CORS_ALLOWED_ORIGINS = [
    "http://localhost:8080",
    "http://127.0.0.1:8080",
    "http://localhost:3000",
    "http://127.0.0.1:3000",

]

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'corsheaders.middleware.CorsMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
// axios request

await axios
                .post('/api/v1/token/login/', formData)
                .then(res => {
                    const token = res.data.auth_token

                    this.$store.commit('setToken', token)
                    axios.defaults.headers.common['Authorization'] = 'Token ' + token 
                    localStorage.setItem('token', token)
                    const toPath = this.$route.query.to || '/cart'
                    this.$router.push(toPath)
                })
                .catch(err => {
                    if(err.reponse){
                        for (const property in err.response.data) {
                            this.errors.push(`${property}: ${err.response.data[property]}`)
                        }
                    }
                    else {
                        console.log(err)
                    }
                })
4

0 回答 0