概要
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の部分を以下のように変更します。
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を以下のようにするだけです。
class ApplicationController < ActionController::API
include DeviseTokenAuth::Concerns::SetUserByToken
include DeviseTokenAuth::Concerns::ResourceFinder
def provider
super
'login_id' # <= 自分のprovider名に変えてください
end
end
おわりに
今回の内容が少しでも誰かのお役に立てれば幸いです。
Railsほぼ初心者の人間が書いているので、何か問題点等ありましたら、ご指摘よろしくお願いします。