<DAY74>deviseを使用したログイン機能について
学習状況
●学習日数 74日
●学習時間(本日) 4.5時間
●累計学習時間 227.0時間
●一日あたりの平均学習時間 3.00時間
deviseとは
ログイン機能を簡単に作成することができるGem。ログイン機能をGem無しで実装するのはめんどくさい。 Gemを使うことで比較的簡単に実装することができる。裏側で実装している内容を把握しつつ、積極的に活用していきたい。
gemのインストールからモデル作成まで。
1: gem 'devise' #gemファイルに追加 2: bundle install #ターミナルで実行 3: rails g devise:instal l config/initializers/devise.rb #作成するファイル config/locales/devise.en.yml #作成するファイル 4: rails g devise user #ログイン機能をもつuserクラスの生成 #作成するファイル #app/models/user.rb #db/migrate/2014XXXXXXXXXX_devise_create_users.rb #test/fixtures/users.yml #test/models/user_test.rb 5nameはデフォルトでカラム設定ないから設定しておく t.string :name, null: false, unique: true, index: true 6: bundle exec rake db:migrate
user_signed_in?メソッド
deviseでログイン機能を実装すると、user_signed_in?というメソッドを使用することができる。 ユーザーがサインインしているかどうか検証するメソッド。
サインインしている →true
サインインしていない→falseと判別してくれる便利なやつ。
<% if user_signed_in? %> # ユーザーがサインインしている場合に実行する処理 <% end %>
deviseによって設定されるprefixの一部
rake routes #prefixやURL、対応するアクション確認
自動生成される。
おまけだが、実際にprefixを利用する場合は、new_user_session_pathのように、 最後に_pathとつける必要があるので、覚えておく。
ログインのビューを変更する
deviseでログイン機能を実装すると、ビューファイルとしては生成されない。 deviseのコマンドを利用してビューファイルを生成する事でビューをいじる事ができる。
rails g devise:views #ビューファイルの生成 #app/views/deviseにできる
scssに加工を想定して
ファイルをインポートさせておく。
@import "modules/user";
ログインしていない時に、ログイン画面に写す時は ユーザーを認証してと叫んでいるメソッドを使う。 これにより、デフォルトでユーザーログイン画面に飛ぶ。
class ApplicationController < ActionController::Base before_action :authenticate_user! end
ストロングパラメーターを編集する
deviseでログイン機能を実装した場合のパラメーターの受け取り方は通常とは異なる。 ログイン時に送られてくるパラメーターを制限するストロングパラメーターは、deviseのGem内に記述されているため編集することができない。 その為に、configure_permitted_parametersメソッドを使う。
configure_permitted_parametersメソッド
初期状態はサインアップ時にメールアドレス
とパスワード
のみを受けとる設定。追加したキーのパラメーターは許可されていない。
追加のパラメーターを許可したい場合にに使用するメソッド。
class ApplicationController < ActionController::Base # Prevent CSRF attacks by raising an exception. # For APIs, you may want to use :null_session instead. protect_from_forgery with: :exception before_action :configure_permitted_parameters, if: :devise_controller? def configure_permitted_parameters devise_parameter_sanitizer.permit(:sign_up, keys: [:nickname]) #追加したいアクション名、追加するキー end end