1
0

More than 1 year has passed since last update.

devise_token_authでproviderを変更する

Posted at

概要

RailsのAPIサーバでdevise_token_authによるトークン認証を実装しようとした際に、providerにかなり苦しめられたので、providerを変更する手順について記事にしました。

やりたいこと

devise_token_authのデフォルトのproviderはemailになっていますが、私はただの文字列(login_idと定義)で認証を行いたかったので、providerを'login_id'に変更したい。これは、usernameなどで認証を行いたい場合も同じで、これから説明することを行う必要があります。

方法

以下を行うことでproviderの変更ができます。

  • devise_token_authのUserテーブルのproviderを'email'→'login_id'にする
  • providerをオーバライド

それぞれについて説明していきます。

テーブルのproviderを変更

devise_token_authでインストールした直後(devise_token_authをinstallしてからdb:migrateするまで)にmigrationファイルを書き換えてproviderの部分を以下のように変更します。

migration
create_table(:user_devise_infos) do |t|
    t.string :provider, :null => false, :default => "login_id" # <= 自分のprovider名に変えてください
    # (以下省略)

devise_token_authの直後というのは、db:migrateしてテーブルを作成した後にproviderの変更のためにrollbackしようとすると、indexの関係でエラーが出てるかもしれないからです。テーブルを作成した後にproviderを変更したい方は以下の記事を参考にするといいと思います。

providerをオーバライド

これは非常に簡単です。application_controller.rbを以下のようにするだけです。

application_controller.rb
class ApplicationController < ActionController::API
        include DeviseTokenAuth::Concerns::SetUserByToken
        include DeviseTokenAuth::Concerns::ResourceFinder

        def provider
                super
                'login_id' # <= 自分のprovider名に変えてください
        end
end

おわりに

今回の内容が少しでも誰かのお役に立てれば幸いです。
Railsほぼ初心者の人間が書いているので、何か問題点等ありましたら、ご指摘よろしくお願いします。

1
0
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
1
0