Я пытаюсь реализовать аутентификацию в 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 (в обещании) Ошибка: токен пуст. Пожалуйста, проверьте ваш внутренний ответ.