Railsアプリでユーザー管理できるgem!deviseの使い方
deviseは、Railsで作成したアプリケーションにユーザー管理機能を実装することができるgemです。
今回はdeviseの使い方を簡単にまとめてみました。
deviseのインストール
まずはgemfileにdeviseを追加します。
gem 'devise'
そして、bundlerでインストールします。
% bundle install
次に、deviseの設定関連に必要なファイルを生成する必要があります。
以下のコマンドを実行すれば自動で生成してくれます。
% rails g devise:install
こんな感じで表示されたら成功です。
Userモデルを作成
deviseを使ってモデルを作成するときは、少しだけ普段と異なる部分があるので注意が必要です。
deviseを使うときはrails g model user
ではなくrails g devise user
とします。
% rails g devise user
このコマンドで生成されたマイグレーションファイルには、emailやpasswordなどが初めから記述されています。
nameカラムなど必要なカラムを付け足して、マイグレーションを行います。
% rails db:migrate
devise_for
deviseでモデルを作成すると、route.rb
のファイルにdevise_for
の記述が追加されます。
Rails.application.routes.draw do devise_for :users end
devise_forはdeviseのヘルパーメソッドで、ユーザー管理に必要なルーティングを自動で設定してくれます。
ビューファイルの作成
実はdeviseをインストールすると、サインイン、ログイン用のビューも自動で生成してくれます。
しかしものすごく質素なので、ビューファイルも自分で作成しましょう。
まずは以下のコマンドでビューファイルを生成します。
% rails g devise:views
以下のようにviewsフォルダの中にdeviseフォルダが生成されるので、必要なものを編集しましょう。
便利なヘルパーメソッド
deviseではいろいろなヘルパーメソッドが用意されているらしいですが、よく使いそうなものをまとめます。
authenticate_user!
ユーザーがログインしているかを確認して、ログインしていなければログイン画面へリダイレクトしてくれるメソッドです。
application_controller.rb
などに以下のように記述して使います。
class ApplicationController < ActionController::Base before_action :authenticate_user! end
user_signed_in?
authenticate_user! と似ていますが、ユーザーのログイン状態を返してくれます。ログインしていればtrue、そうでなければfalseを返します。
ログインしているか否かで表示を変えたいときなどに使えます。
if user_signed_in? #処理 else #処理 end
current_user
現在ログインしているユーザーの情報を取得できます。
いちいちuser = User.find(params[:id])
的なことをしなくてもいいのです。
devise_parameter_sanitizer (configure_permitted_parameter)
ストロングパラメーターの設定に使います。
デフォルトではemailとpasswordしか受け取れないので、nameやageなど必要なものを追加します。
class ApplicationController < ActionController::Base before_action :authenticate_user! before_action :configure_permitted_parameters, if: :devise_controller? private def configure_permitted_parameters devise_parameter_sanitizer.permit(:sign_up, keys: [:name]) end end
まとめ
- devise導入後は設定関連のファイルを生成する必要がある
- モデルを作るときはdevise用のコマンドを使用
- ビューファイルもdeviseのコマンドで作成できる
- 便利なヘルパーメソッドがいろいろ
実際にはもっといろいろな機能があるみたいですが、基本的な使い方はこんな感じです。