😺

devise_token_authの設定について

2024/01/31に公開

最初に

今回は、Railsのdevise_token_authについての記事を書いて行きます。
Railsの認証機能として、代表的なgemでございます。

今回の記事は、初心者向けの記事ですので、ご了承ください。

deviseとは

deviseは、Railsで簡単にログインやサインアップなどの認証機能を実装することができるgemの事です。

devise_token_authとは

devise_token_authとは、トークン認証機能を実装することができるgemです。
例えば、ユーザーがログインした時にサーバー側でトークンが生成されてそれを、Headerに含めてユーザー側にレスポンスすることができます。

devise_token_authの導入

まずは、必要なgemをGemfileに書いていきます。

Gemfile
+ gem 'devise'
+ gem 'devise_token_auth'

次に、gemをインストールします。

bundle install

インストールが完了したら、devise用のファイルを以下のコマンドで作成します。

rails g devise:install
rails g devise_token_auth:install User auth

上記のコマンドによりmigrationファイルの他、複数のファイルが作成、変更が行われました。特に変更はないので、マイグレーションしたいと思います。

rails db:migrate

上記のコマンドにより、rails/db/schema.rbusersテーブルが作成されたと思います。

devise_token_authの設定

まずは、作成されたconfig/initializers/devise_token_auth.rbにdevise_token_authの設定をしていきます。

:::note info
以下のコードをコメントアウトしてください。
:::

config/initializers/devise_token_auth.rb
DeviseTokenAuth.setup do |config|

  # リクエストごとにトークンを更新するか
  # 毎回更新されないようにするため、falseにします。
  config.change_headers_on_each_request = false

  # トークンの有効期間
  # 2週間の有効期限です(変更可能)
  config.token_lifespan = 2.weeks

  # ヘッダーの名前を定義
  config.headers_names = {:'access-token' => 'access-token',
                          :'client' => 'client',
                          :'expiry' => 'expiry',
                          :'uid' => 'uid',
                          :'token-type' => 'token-type' }
end

ルーティングの設定

authディレクトリの中にあるregistrationsコントローラーでログインとサインアップ機能を行えるようにします。

config/routes.rb
Rails.application.routes.draw do
    mount_devise_token_auth_for 'User', at: 'auth', controllers: {
    #authディレクトリにあるregistrationsコントローラーに設定
      registrations: 'auth/registrations'
    }
end

上記により、設定が完了しました。

コントローラーの設定

最初にコントローラーを作成します。

rails g controller auth/registrations

app/controllers/auth/registrations_controller.rbという形で作成されていると思います。

次に、コントローラーの設定をします。

app/controllers/auth/registrations_controller.rb
class Auth::RegistrationsController < DeviseTokenAuth::RegistrationsController

    private

    def sign_up_params
      #name,email,password,password_confirmationのみをキーとして許可する
      params.permit(:name, :email, :password, :password_confirmation)
    end
end

以上でコントローラーの設定が完了しました。

次は、CORSの設定にいきます。

CORSの設定

CORSとは

CORSとは、異なるオリジン間でのリソース共有を可能にするセキュリティ
の仕組みのことです。
つまり、クライアント側がサーバーサイドのデータにアクセスする時の制限や許可を管理したりします。

CORSの導入

rack-corsというgemをインストールします。

Gemfile
+ gem 'rack-cors'

gemをインストールします。

bundle install

インストールが完了したら、config/initializers/cors.rbというファイルがあると思いますので、編集していきます。

config/initializers/cors.rb
Rails.application.config.middleware.insert_before 0, Rack::Cors do
  allow do
    # origins 'example.com'の部分を'*'に変更
    # '*' ですべてのHTTPリクエストを許可する設定
    origins '*'

    resource '*',
      headers: :any,

      # exposeの行を追加することで、ブラウザからアクセスできるヘッダー情報を指定します
      expose: ['access-token', 'expiry', 'token-type', 'uid', 'client'],
      # どのHTTPリクエストメソッドを許可するか指定
      methods: [:get, :post, :put, :patch, :delete, :options, :head]
  end
end

上記の部分をコメントアウトして、変更を加えれば設定完了です。

devise_token_auth設定は、以上となります。


参考

https://qiita.com/tkht2401/items/08776bb276579663528b

Discussion