リクエスト仕様の認証に問題があります。各HTTP要求のヘッダに有効な認証トークンをどのように渡すのですか?私のアプローチは正しいか?ここ各http RSpecテストヘッダーに認証トークンを追加する方法
tweets_request_spec.rb
require 'rails_helper'
RSpec.describe 'Tweets API', type: :request do
before do
@tweets = create_list(:tweet, 10)
@tweet = @tweets.first
end
describe 'GET /tweets' do
before { get '/tweets', { "Authorization": *some sort of token*} }
it "returns tweets" do
expect(json).to_not be_empty
expect(json).to eq(10)
end
it "is a successful http request" do
expect(response).to have_http_response(200)
end
end
end
は私の認証制御するためのコード、ならびにHTTPヘッダーに渡される認証トークンを生成及び復号化を支援モジュールです。
authentication_controller.rb
class AuthenticationController < ApplicationController
skip_before_action :authenticate_request
def authenticate
command = AuthenticateUser.call(params[:email], params[:password])
if command.success?
render json: { auth_token: command.result }
else
render json: { error: command.errors }, status: :authorized
end
end
end
authorize_api_request.rb
class AuthorizeApiRequest
prepend SimpleCommand
def initialize(headers = {})
@headers = headers
end
def call
user
end
private
attr_reader :headers
def user
@user ||= User.find(decoded_auth_token[:user_id]) if decoded_auth_token
@user ||= errors.add(:token, 'Invalid token') && nil
end
#decode the auth token and retrieve the user id
def decoded_auth_token
@decoded_auth_token ||= JSONWebToken.decode(http_auth_header)
end
#retrieve auth token from header
def http_auth_header
if headers['Authorization'].present?
return headers['Authorization'].split(' ').last
else
errors.add(:token, 'Missing token')
end
end
end
であざけるについての詳細を読むことができますが、私は、ユーザー認証を追加するには、このリンクをたどってきたあなたは、この –
を構築するために使用されているリンクが含まれます。https://www.pluralsight ruby-on-rails/token-based-with-ruby-on-rails-5-api – Jas1997
おかげで幸せな新年 –