我的应用程序有以下控制器:
class Api::BaseApiController< ApplicationController
before_action :parse_request, :authenticate_member_from_token!
def index
render nothing: true, status: 200
end
protected
def authenticate_member_from_token!
if !request.headers[:escambo_token]
@member = Member.find_by_valid_token(:activate, request.headers['escambo_token'])
if !@member
render nothing: true, status: :unauthorized
end
end
end
然后,我有另一个从该Controller继承的控制器:
class Api::CategoryController < Api::BaseApiController
before_action :find_category, except: [:index]
def index
@category = Category.all
puts(@category)
render json: @category
end
但是控制器允许没有令牌的请求。
编辑1 :由于某种原因,index
操作开始正常运行。但仍然没有对令牌进行验证。
编辑2 :从private
到protected
的修复方法
答案 0 :(得分:1)
如果令牌丢失或无效,您的代码需要呈现POJOMappingFeature
。换句话说,您需要使用以下代码:
:unauthorized
但是,使用此代码,您可能会发现自己在控制器中进行了双重渲染。一种更清洁的方法可能是提出异常,然后从中拯救并适当地呈现 - 例如。
def authenticate_member_from_token!
unless Member.find_by_valid_token(:activate, request.headers['escambo_token'])
render nothing: true, status: :unauthorized
end
end