Ruby on RailsでAPIトークンを発行して認証を行うまでと、RSpecでのテストの実装のサンプルです。
🍮 Railsプロジェクトの準備
rails new auth_test --api -d postgresql
bundle exec rails g scaffold Article title:string content:text bundle exec rake db:setup bundle exec rake db:migrate
|
😼 コントローラ側の実装
app/controllers/application_controller.rb
にtokenの認証を実装します。
class ApplicationController < ActionController::API include ActionController::HttpAuthentication::Token::ControllerMethods
before_action :authenticate
protected
def authenticate authenticate_or_request_with_http_token do |token, options| token == ENV['API_TOKEN'] end end end
|
🐝 認証のテスト
HTTPのリクエストのヘッダにトークン情報を渡します。
API_TOKEN=HOGE rails s
curl -s -X GET -H 'Authorization: Bearer HOGE' -H 'Content-Type:application/json' http://0.0.0.0:3000/articles/1 | jq . { "id": 1, "title": "test-title", "content": "test-content", "created_at": "2017-07-09T08:44:55.054Z", "updated_at": "2017-07-09T08:44:55.054Z" }
curl -X GET -H 'Authorization: Bearer FUGA' -H 'Content-Type:application/json' http://0.0.0.0:3000/articles/1 HTTP Token: Access denied.
|
🐯 RSpec
認証をサポートするモジュールspec/support/authentication_helper.rb
を作成。
module AuthenticationHelper def authenticate @env ||= {} @env['HTTP_AUTHORIZATION'] = "Bearer #{ENV['API_TOKEN']}" end end
|
spec/rails_helper.rb
に以下を追加。
RSpec.configure do |config| config.include AuthenticationHelper, type: :request end
|
Request Specでは次のように記述します。
it 'should not allow access' do authenticate GET '/articles/1', {}, @env end
|
🐹 参考リンク
🖥 VULTRおすすめ
「VULTR」はVPSサーバのサービスです。日本にリージョンがあり、最安は512MBで2.5ドル/月($0.004/時間)で借りることができます。4GBメモリでも月20ドルです。
最近はVULTRのヘビーユーザーになので、「ここ」から会員登録してもらえるとサービス開発が捗ります!