helper 的使用
helper 的存在目的就是希望這個 method 可以在多處被使用,通常會是比較通用的需求
例如:權限檢查、當前的使用者 current_user 等等
這邊我們要來實做 authenticate!
方法,讓需要用到的 endpoint 可以驗證用戶,如果非用戶或 token 錯誤,則直接拋出相對應的 Error
還記得吧?我們在前篇已經先行製作了 AuthorizationError
,就是為了這裡使用的
建立 helper 檔案 touch app/api/api_v0/helpers.rb
module ApiV0
module Helpers
def authenticate!
current_user or raise AuthorizationError
end
def current_user
@current_user ||= env["api_v0.user"]
end
end
end
備註: env["api_v0.user"]
這個是在 middleware 先塞好的
在入口檔案加入 helpers 的載入
module ApiV0
class Base < Grape::API
version 'v0', using: :path
#...
helpers ::ApiV0::Helpers
#...
end
end
如果想測試的話,可以在 ping.rb 裡面加一行 authenticate!
例如以下
module ApiV0
class Ping < Grape::API
desc 'Ping pong'
get "/ping" do
authenticate!
end
end
end
接下來戳 http://localhost:3000/api/v0/ping 應該就會看到權限不足的部分了
{
"error": {
"code": 2001,
"message": "Authorization failed"
}
}