web系エンジニアを目指す私、siが学習のアウトプットをメインにプログラミングについての記事を書いていきます。

【Rails】deviseの導入・使い方は?ヘルパーメソッドについても解説!

2021/11/06
 
この記事を書いている人 - WRITER -

 

こんにちは!

web系エンジニアとして自社開発企業への転職を目指して、

プログラミング学習中のsiです!

 

今回の記事では、

deviseの導入方法について解説します!

 

※使用シェルはzshです

また、この記事で出てくる「%」はプロンプトなので実際に入力する必要はありません

 

マシンスペック

 

参考までに私のマシンスペックをご紹介しておきます。

  • macOS Big Sur 11.5.1
  • Macbook Pro(13-inch,2020,Four Thunderbolt 3 ports)
  • intel Core i5
  • メモリ 16GB
  • ストレージ 512GB
  • 使用シェル zsh

 

deviseとは

 

deviseはRailsで使用出来るgemの1つです。

deviseを使用することで、実装が面倒なログイン/ログアウト・サインアップ機能を簡単に実装することができます。

 

Railsチュートリアルをやった事がある方ならわかると思いますが、

ログイン/ログアウト・サインアップ機能を0から実装していくのって結構大変ですよね^^;

 

そんな、面倒な実装もdeviseを使用する事で簡単に実装できてしまいます^ ^

 

でも、個人的にはこれらの機能の根本の仕組みを理解するためにも、Railsチュートリアルなどで1度学習してみることをおすすめします。

 

 

deviseの導入

 

1. Gemfileの編集

# Gemfile

gem 'devise'

 

2. deviseのインストール

% bundle install

% rails g devise:install

 

3. deviseの初期設定

===============================================================================

Depending on your application's configuration some manual setup may be required:

1. Ensure you have defined default url options in your environments files. Here
is an example of default_url_options appropriate for a development environment
in config/environments/development.rb:

config.action_mailer.default_url_options = { host: 'localhost', port: 3000 }

In production, :host should be set to the actual host of your application.

* Required for all applications. *

2. Ensure you have defined root_url to *something* in your config/routes.rb.
For example:

root to: "home#index"

* Not required for API-only Applications *

3. Ensure you have flash messages in app/views/layouts/application.html.erb.
For example:

<p class="notice"><%= notice %></p>
<p class="alert"><%= alert %></p>

* Not required for API-only Applications *

4. You can copy Devise views (for customization) to your app by running:

rails g devise:views

* Not required *

===============================================================================

rails g devise installを行うと、上記のメッセージが表示されるので、1から4まで順番に設定を行なっていきます。

 

1 新規登録などで認証メールを送った際のメール文中にある認証リンクのURL設定

# config/environments/development.rb

config.action_mailer.default_url_options = { host: 'localhost', port: 3000 }
# この1行を追加する

 

2 ルートの設定

会員登録完了後にルートURLに飛ぶ設定になっているため、

config/routes.rbルートURLを設定する  ※この設定は後からでも問題ない

 

3 フラッシュメッセージ用のタグを共通viewに埋め込む

# app/views/layouts/application.html.erb

<body>
ここから
<p class="notice"><%= notice %></p>
<p class="alert"><%= alert %></p>
ここまで
<%= yield %>
</body>

 

4 deviseのviewをカスタマイズするため、devise用のviewをインストールする

※カスタマイズする必要が無ければインストールしなくても良いです。

% rails g devise:views

 

 

4. 認証用のモデルを作成する ※モデル名はuserでなくても良い

% rails g devise user

% rails db:migrate

これで基本的なdeviseの導入は完了です!

 

 

deviseのヘルパーメソッド

 

deviseを導入する事で便利なヘルパーメソッドが使えるようになります。

ここでは、よく使用する3つのヘルパーメソッドを紹介します。

 

1 user_signed_in?

ユーザーがログインしているかどうかを判定してくれるメソッド。

ログイン時にはtrueを返し、ログアウト時にはfalseを返す。

# 使用例

<% if user_signed_in? %>
<ul>
<li><%= link_to "LogOut", destroy_user_session_path, method: :delete %></li>
</ul>
<% else %>
<ul>
<li><%= link_to "LogIn", new_user_session_path %></li>
<li><%= link_to "SignUp", new_user_registration_path %></li>
</ul>
<% end %>

ログイン時には、ログアウトボタンを表示して、

ログアウト時にはログインボタンサインアップボタンを表示させている。

このように、ログイン時・ログアウト時で処理を分けたい時に使用する。

 

2 current_user

読んで字のごとくで、現在ログインしているユーザーの情報を取得するメソッド。

# 使用例

<%= current_user.id %>

このようにViewに記述する事で、現在ログインしているユーザーのidを表示する事ができる。

 

3 authenticate_user!

#使用例①

before_action :authenticate_user!, except: [:show, :index]


使用例②

before_action :authenticate_user!, only: [:new, :create, :edit, :update, :destroy]

 

「only」で指定、もしくは、「except」で除外を行なった以外のメソッドに対して、ユーザーがログアウト状態でアクセスすると自動でログイン画面に遷移させるヘルパーメソッドです。

 

メソッドが読み込まれる前にauthenticate_user!を読み込む必要があるため、コントローラの上部に記述します。

※コードは上から読み込まれるため

 

使用例①の場合だと、exceptを使用しているため、

ログアウト状態で「show」、「index」以外のメソッドにアクセスした場合、ログイン画面に遷移されます。

 

使用例②の場合だと、onlyを使用しているため、

ログアウト状態で「new」、「create」、「edit」、「update」、「destroy」のメソッドにアクセスした場合、ログイン画面に遷移されます。

 

最後に

 

deviseは非常に多くの方が使っているGemの1つです。

他にも色々なことが出来る、とても便利なGemなのでぜひぜひ使ってみてください^ ^

 

今後も、どんどん記事投稿を行なっていくので、

よければ、応援の方お願い致します(*^ω^*)

 

それでは!

 

参考記事

 

 

 

この記事を書いている人 - WRITER -

- Comments -

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA


Copyright© .i DO WHAT I WANT , 2021 All Rights Reserved.