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"
    }
}
Copyright © NicLin 2019 all right reserved,powered by Gitbook該頁面生成時間: 2019-04-09 10:00:37

results matching ""

    No results matching ""