deviseとは
deviseは、Railsで簡単にログインやサインアップなどの認証機能を実装することができるgemの事です。
devise_token_authとは
devise_token_authとは、トークン認証機能を実装することができるgemです。
例えば、ユーザーがログインした時にサーバー側でトークンが生成されてそれを、Headerに含めてユーザー側にレスポンスすることができます。
devise_token_authの導入
まずは、必要なgemを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.rb
にusersテーブル
が作成されたと思います。
devise_token_authの設定
まずは、作成されたconfig/initializers/devise_token_auth.rb
にdevise_token_authの設定をしていきます。
以下のコードをコメントアウトしてください。
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コントローラーでログインとサインアップ機能を行えるようにします。
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
という形で作成されていると思います。
次に、コントローラーの設定をします。
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をインストールします。
+ gem 'rack-cors'
gemをインストールします。
bundle install
インストールが完了したら、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
上記の部分をコメントアウトして、変更を加えれば設定完了です。
oroginsの設定について
例えばクライアント側のホスト名がlocalhost:8000
の場合は、originsの箇所にorigins 'localhost:8000'と入れてください。
devise_token_auth設定は、以上となります。
参考