I'm trying to do a params validation check for my get action. But somehow it's not working. Can someone suggest me how can we do. Below is my code for the same. If I send a request without any parameters, params validation is not happening. May I know the reason for that and how can I fix that please.
module API
module V1
class Permissions < Grape::API
include Defaults
helpers do
def ensure_user_exists!
error!('Not authorized', 401) unless user_by_token.present?
end
def user_by_token
@user ||= User.find_by(token: params[:user_token])
end
end
resource :permissions do
params do
requires :user_token, type: String
end
before do
ensure_user_exists!
end
resource :documents do
get :document_details do
error!('Access Denied', 403) unless user_by_token.manager?
end
end
end
end
end
end
localhost:3000/api/permissions/documents/document_details.json returning error in user_by_token method.
You misplaced the params block. You should have placed it before the get block, like this:
module API
module V1
class Permissions < Grape::API
include Defaults
helpers do
def ensure_user_exists!
error!('Not authorized', 401) unless user_by_token.present?
end
def user_by_token
@user ||= User.find_by(token: params[:user_token])
end
end
resource :permissions do
before do
ensure_user_exists!
end
resource :documents do
params do
requires :user_token, type: String
end
get :document_details do
error!('Access Denied', 403) unless user_by_token.manager?
end
end
end
end
end
end