我正在尝试修复Ruby On Rails中的“过滤器链暂停”错误

时间:2019-02-13 09:26:24

标签: ruby-on-rails

我收到的错误消息指出:

Filter chain halted as :authenticate_request rendered or redirected
Completed 401 Unauthorized in 1ms

我正在尝试访问一个名为localhost:3000/items的页面

我已经完全摆脱了before_action并开始运行它,但是我需要身份验证才能工作。

编辑
我通过在终端中执行以下操作来接收令牌:

$ curl -H "Content-Type: application/json" -X POST -d '{"email":"example@mail.com","password":"123123123"}' http://localhost:3000/authenticate

当我收到令牌时,然后尝试通过以下方式传递令牌:

$ curl -H "Authorization: 123EXAMPLETOKEN123" http://localhost:3000/items

这是我的application_controller,我相信这是我遇到麻烦的主要原因

class ApplicationController < ActionController::API
 before_action :authenticate_request
 attr_reader :current_user

 private

 def authenticate_request
  @current_user = AuthorizeApiRequest.call(request.headers).result
  render json: { error: 'Not Authorized' }, status: 401 unless @current_user
 end
end

以下代码,我认为也可能与该问题有关,即我的AuthorizeApiRequest

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

 def decoded_auth_token
  @decoded_auth_token ||= JsonWebToken.decode(http_auth_header)
 end

 def http_auth_header
  if headers['Authorization'].present?
   return headers['Authorization'].split(' ').last
  else
   errors.add(:token, 'Missing token')
  end
  nil
 end
end

0 个答案:

没有答案