У меня есть настройка аутентификации токена с DRF и VueJS. Однако я не могу войти в систему, используя комбинацию VueJS, axios и системы токенов DRF, и я не понимаю, почему. У меня CORS
установлен, и если я вручную установлю токен в код VueJS, все мои запросы от VueJS к API-интерфейсу DRF будут работать нормально. Это просто логин и получение начального токена, который не работает.
Вот мой код:
URL-адреса Django:
from rest_framework.authtoken import views
url(r'^api/token-auth/', views.obtain_auth_token)
Промежуточное ПО Django
class SiteLogin:
def process_request(self, request):
url = request.path.split('/')
# Don't require password for the URL /api/token-auth/
if url[1] == 'api' and url[2] == 'token-auth':
return None
Служба аутентификации - VueJS:
// ... other code ...
login (context, creds, redirect) {
console.log(creds)
axios.post(LOGIN_URL, creds).then((response) => {
localStorage.setItem('token', response.data.token)
this.user.authenticated = true
// If a redirect link is provided
if (redirect) {
router.push(redirect)
}
}).catch((err) => {
console.log(err)
})
},
Компонент входа в систему - VueJS:
<template>
<div>
<div class='container-fluid container-fullw bg-white'>
<div class='row'>
<div class='col-md-4'>
Login<br>
<br>
<input type='text' class='form-control' placeholder="Username" v-model='credentials.username'><br>
<input type='password' class='form-control' placeholder="Password" v-model='credentials.password'><br>
<button class='btn btn-primary btn-sm' @click='submit()'>Login</button>
</div>
</div>
</div>
</div>
</template>
<script>
import auth from '../../services/auth'
export default {
name: 'login',
data () {
return {
credentials: {
username: '',
password: ''
},
error: ''
}
},
methods: {
submit () {
auth.login(this, this.credentials, '/')
}
}
}
</script>
После нажатия кнопки «Отправить» серверная часть DRF всегда возвращает 401.
Изменить:
Кроме того, если я добавлю print(request.POST)
в раздел SiteLogin
промежуточного программного обеспечения Django, я могу увидеть, что а) оператор if
возвращает истину (он подтверждает, что это URL-адрес входа) и б) QueryDict
пуст - я вижу: <QueryDict: {}>