В настоящее время я использую Devise с моим приложением Rails API для аутентификации пользователей с помощью devise-jwt.
Вот как выглядит моя модель User:
class User < ApplicationRecord
devise :database_authenticatable,
:registerable,
:jwt_authenticatable,
jwt_revocation_strategy: JWTBlackList
end
И config/routes.rb
настроен так:
Rails.application.routes.draw do
devise_for :users,
path: '',
path_names: {
sign_in: 'login',
sign_out: 'logout',
registration: 'signup'
},
controllers: {
sessions: 'sessions',
registrations: 'registrations'
}
end
Это контроллер сессий:
class SessionsController < Devise::SessionsController
private
def respond_with(resource, _opts = {})
render json: resource
end
def response_to_on_destroy
head :no_content
end
end
и контроллер регистрации:
class RegistrationsController < Devise::RegistrationsController
respond_to :json
def create
build_resource(sign_up_params)
resource.save
render_resource(resource)
end
end
Я провел несколько тестов Rspec, показанныхниже, которые были успешными -
require 'rails_helper'
RSpec.describe SessionsController, type: :request do
let(:user) { create(:user) }
let(:url) { '/login' }
let(:params) do
{
user: {
email: user.email,
password: user.password
}
}
end
context 'when params are correct' do
before do
post url, params: params
end
it 'returns 200' do
expect(response).to have_http_status(200)
end
it 'returns JTW token in authorization header' do
expect(response.headers['Authorization']).to be_present
end
it 'returns valid JWT token' do
decoded_token = decoded_jwt_token_from_response(response)
expect(decoded_token.first['sub']).to be_present
end
end
end
Но когда я запускаю следующий запрос POST к /login
на Почтальоне, я получаю следующее сообщение:
Справа вы видите консоль и сервер рельсов, показывающие, что учетные данные верны, но мы все равно получаем 401
Есть какие-нибудь подсказки, что может быть не так?Было трудно найти хорошие ресурсы для Devise с использованием Rails API.
Заранее спасибо