Movatterモバイル変換


[0]ホーム

URL:


酒と泪とRubyとRailsと

RailsのコントローラでAPI認証 / RSpecでテスト


Ruby on RailsでAPIトークンを発行して認証を行うまでと、RSpecでのテストの実装のサンプルです。

🍮Railsプロジェクトの準備

# プロジェクトの作成
rails new auth_test --api -d postgresql

# scaffoldで新しいモデルを生成
bundleexec rails g scaffold Article title:string content:text
bundleexec rake db:setup
bundleexec rake db:migrate

😼コントローラ側の実装

app/controllers/application_controller.rbにtokenの認証を実装します。

classApplicationController< ActionController::API
include ActionController::HttpAuthentication::Token::ControllerMethods

before_action:authenticate

protected

defauthenticate
authenticate_or_request_with_http_tokendo|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を作成。

moduleAuthenticationHelper
defauthenticate
@env||= {}
@env['HTTP_AUTHORIZATION'] ="Bearer#{ENV['API_TOKEN']}"
end
end

spec/rails_helper.rbに以下を追加。

RSpec.configuredo|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のヘビーユーザーになので、「ここ」から会員登録してもらえるとサービス開発が捗ります!

📚 おすすめの書籍

Rails/Modelバリデーションコールバック変更前後の値の確認値の保存・更新アソシエーション削除メソッドSQLの実行日付カラムの設定便利なDB関連設定読込み専用(Read Only)Concern(共通処理)クエリTipsRails/Controllerrenderレシピ集HTTPステータスシンボルIPの取得についてStrong ParametersControllerのTipsRails/ViewHAMLチートシート画像アップロードフォームS3への画像アップロードForm Objectフォームヘルパー検索可能なselectタグenum - selectタグシンプルな検索ボックス別ウィンドウ・フォームRailsいろいろi18nについてRails.cacheメール送信ロギングCapistrano3でデプロイセッション管理環境ごとのYAML設定読込xx分前の時間表記Tipsいろいろ便利ライブラリ簡単Webmock:VCRN+1対策:bullet環境変数の管理: dotenvi18nサポート: i18n-tasksLDAP:net-ldapヘッダ:secureheadersrack-mini-profileractiverecord-precountカバレッジ計測パンくずリスト+MetadataRSpecの記法自動修正アプリランキング取得Unicorn導入手順unicorn-worker-killerRSpecController SpecCapybaraとヘッドレスChromeRequest SpecAPI認証 Spec便利Tipsデザインパターン概要アブストラクトファクトリビルダファクトリメソッドアダプタコンポジットデコレータプロキシコマンドインタプリタイテレータオブザーバストラテジテンプレートメソッドRuby基礎文字列/String配列/Arrayハッシュ/Hash構造体/StructSpawn(コマンド実行)BundlerについてTipsRails 5.1へのアップデートRails 5へのアップデートrbenvバージョンアップpumaをsystemdで動かすURI.encodeとCGI.escapeURLのパラメータを変更処理時間を計測画像JPEG/PNG/GIF判定トラブルシュートNo route matches assets

[8]ページ先頭

©2009-2025 Movatter.jp