Как исправить ошибку «Ошибка: токен пуст. Пожалуйста, проверьте ответ вашего бэкенда».в Ember.js и Django REST Framework - PullRequest
0 голосов
/ 09 июля 2019

Я пытаюсь реализовать аутентификацию в Ember.js с использованием веб-токенов JSON, сгенерированных из Django REST Framework.

Джанго 2.0.13 Django REST Framework 3.9.4 Django REST Simple JWT 4.3.0

Я последовал примеру из этого хранилища: https://github.com/jpadilla/ember-simple-auth-token

У меня есть плагины для DRF, которые отрисовывают и анализируют в соответствии со стандартом JSON API, их отключение не имеет никакого эффекта.

# urls.py
from rest_framework_simplejwt.views import TokenObtainPairView, TokenRefreshView
path("api/token/", TokenObtainPairView.as_view(), name='token_obtain_pair'),
    path('api/token/refresh/', TokenRefreshView.as_view(), name='token_refresh'),
// config/environment.js
  ENV['ember-simple-auth-token'] = {
    refreshAccessTokens: true,
    refreshLeeway: 300, // refresh 5 minutes (300 seconds) before expiration
    serverTokenEndpoint: 'http://localhost:8000/api/token/',
    serverTokenRefreshEndpoint: 'http://localhost:8000/api/token/refresh/',
    tokenPropertyName: 'access',
  };
// adapters/application.js
import DS from 'ember-data';
import TokenAuthorizerMixin from 'ember-simple-auth-token/mixins/token-authorizer';

export default DS.JSONAPIAdapter.extend(TokenAuthorizerMixin, {
  host: 'http://localhost:8000',
  namespace: 'api',
});
// controllers/u/login.js
import Controller from '@ember/controller';
import { inject } from '@ember/service';

export default Controller.extend({
  session: inject('session'),

  actions: {
    authenticate: function() {
      const credentials = this.getProperties('username', 'password');
      const authenticator = 'authenticator:jwt';

      this.get('session').authenticate(authenticator, credentials);
    }
  }
});
<!-- templates/u/login.hbs -->
<form {{action 'authenticate' on='submit'}}>
  <label for="username">Login</label>
  {{input id='username' placeholder='Enter Login' value=username}}
  <label for="password">Password</label>
  {{input id='password' placeholder='Enter Password' type='password' value=password}}
  <button type="submit">Login</button>
</form>

Я могу сделать успешный запрос с помощью Почтальона в Django и получить обратно JWT.

Отправка формы входа с правильными учетными данными приводит к ошибке консоли: Uncaught (в обещании) Ошибка: токен пуст. Пожалуйста, проверьте ваш внутренний ответ.

...