VueJS - невозможно получить токен пользователя из Django Rest Framework через POST для входа

У меня есть настройка аутентификации токена с 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: {}>


person Garfonzo    schedule 23.08.2017    source источник


Ответы (1)


Я решил это здесь: https://stackoverflow.com/a/45850775/717682

Проблема заключалась в том, что TokenAuthentication не позволял вообще вызывать мой запрос axios POST - немедленно возвращал 401.

person Garfonzo    schedule 23.08.2017