LoginSignup
12
8

ポートフォリオ作成で超有益! Ruby on Railsのログイン機能作成時に使うdevise_token_authの使い方

Last updated at Posted at 2021-10-15

devise_token_authとは

新規登録、ログイン、ログアウトなどの機能を実装する時に、
使用し、トークン認証という、ユーザー認証ができるgemです。
この記事ではdevise_token_authの設定を説明していきます。

Gemfileの設定

まずはGemfileの設定からです。
下のgemをGemfileに追記します。

 gem "devise"
 gem "devise_token_auth"
 gem 'rack-cors'    #URLのアクセスが重複することを許可してくれる。

その後bundle installをします。

インストール

下のコマンドでインストールします。

rails g devise:install

でdeviseをインストールします。

rails g devise_token_auth:install User auth

devise_token_authをインストールします。
authは認証のことです。

認証機能を実装

環境設定は終わったので、認証機能を実装をします。

まずは認証コントローラーを実装します。

rails g controller api/v1/registrations

すると、api/v1/auth/registrations_controller.rbが作成されます。
classの部分を以下のように修正します。

api/v1/auth/registrations_controller.rb

class Api::V1::Auth::RegistrationsController < DeviseTokenAuth::RegistrationsController

end

ルーティング設定

api/v1/authでコントローラーを作ったので、ルーティングは下のようになります。

config_routes.rb
Rails.application.routes.draw do
     namespace :api do
     namespace :v1 do
    mount_devise_token_auth_for 'User', at: 'auth', controllers: {
        registrations: 'api/v1/auth/registrations'
    }
    end
    end
end

⚫︎補足
namespaceはapi/v1の名前空間を作る時に使います。Rails.application.routes.draw do
mount_devise_token_auth_for 'User', at: 'auth'とは
サインインやサインアウトなどの認証ができるようにするためのルーティングです。
api/v1/registration_controller.rbをmount_devise_token_auth_for 'User', at: 'auth'で
認証するためという意味のコードです。

devise_token_auth.rbの設定

initializerの中にdevise_token_auth.rbというファイルがありますが、
ここを公式ドキュメントを参照して必要なコードをコメントアウトしていきます。
https://devise-token-auth.gitbook.io/devise-token-auth/config/initialization

config/initializers/devise_token_auth.rb

DeviseTokenAuth.setup do |config|
#リクエストごとに、headersの情報を変える。
   config.change_headers_on_each_request = false #trueからfalseに変更
#リクエストごとにheadersが変わるのはかなり面倒。

#ユーザーは2週間後に再認証する必要があり、
#トークンが発行された後、トークンが有効であり続ける期間が2週間とする
    config.token_lifespan = 2.weeks

# headersに含まれている名前を下のように変える
    config.headers_names = { 'access-token': "access-token",
                           client: "client",
                           expiry: "expiry",
                           uid: "uid",
                           'token-type': "token-type" }
end

現場で頭が真っ白にならないために

現場に入ったら頭が真っ白になるのは未経験や経験が浅いエンジニアあるあるです。
僕もそうでした。
そのための対策としてCRUD処理と認証機能を自力で作るのがいいです。
大半のウェブアプリはこの2つの延長にあるのが多いです。

最後に

この辺を実装するとログイン機能は作れましたが、
状況によって実装内容が変わることがあるのでコピペだけにはならないようにお願いします。
あくまで参考資料としてみてください。

12
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
8