yujiroのプログラミング

勉強内容をアウトプットし、サボらないようにする為のブログ

<DAY74>deviseを使用したログイン機能について

\ Follow me!! /

f:id:yujiro0320:20190415152250p:plain

学習状況

●学習日数 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、対応するアクション確認

自動生成される。

f:id:yujiro0320:20190503225817p:plain

おまけだが、実際に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