RailsでGemを使ってログイン機能を追加する方法

ログイン機能を追加する方法


Railsにはログイン機能を簡単に実装できる便利な方法が存在します。

その方法は、gemをインストールする方法です。

ログイン機能を追加する為のgemにも色々ありますが、今回は「devise」というgemを使って実装していきます。


deviseをインストールする手順


①「Gemfile」に「gem devise」と記述をする。

gem 'devise'

②ターミナルで「bundle install」を実行する。

$ bundle install

③仮想サーバーを立ち上げ直す「rails s」

④deviseの専用コマンドをターミナルで実行し、セットアップを行う。

#セットアップコマンド
$ rails g devise:install

#以下の2つのファイルが作成される
config/initializers/devise.rb
config/locales/devise.en.yml

devise用のコマンド紹介


続いてdeviseをインストールした際に使用できるコマンドの紹介をします。

①モデルファイルの作成:ターミナルで「rials g devise モデル名」を実行する

この作業によって最低限のログイン画面は完成します。

#モデル作成コマンド(userと言う名前のモデルを作成)
$ rails g devise user

#以下4つのファイルが作成される
app/models/user.rb
db/migrate/20200625022258_devise_create_user.rb
test/fixtures/user.yml
test/models/user_test.rb

※6行目のマイグレーションファイルは作成日時によって名称が多少異なります。

※config/routes.rbファイルに「devise_for :users」頭コードが追加されています。 

※モデル作成後には、ターミナルでマイグレートを実行し、テーブルをデータベースに反映させる

$ rails db:migrate

②devise用のビューファイルを作成する

ログイン画面、新規登録画面をカスタマイズしたい時はこの作業を行います。

$ rails g devise:views

#app/views/devise以下のディレクトリに
各種ビューファイルが作成される

※新規登録、及び、ログイン画面を編集したい時は以下のファイルを編集するといけます。

  • app/views/devise/registration/new.html.erb
  • app/views/devise/sessons/new.html.erb

③devise用のコントローラーファイルを作成する

新規登録完了、ログイン完了した直後にどんな動作をさせたいかなどを操作できるようになります。

ログインした時にルートパスを使ってメインページに飛ぶように設定したい時は、devise用のコントローラーは特に必要ないです。

#コントローラー作成コマンド(usersと言う名前のコントローラーを作成)
$ rails g devise:controllers users 

deviseをインストールしたら使用できるメソッドの紹介


user_signed_in?メソッド

ユーザーがサインイン(ログイン)しているか確認する為のメソッドになります。

使い方の例は以下になります。

<% if user_signed_in? %>
  #ユーザーがサインインしている時に行う処理
 例えば、ボタンの表示を変更するなど
<% end %>

ヘルパーメソッドを使用してif文を使うとサインインしているかどうかを調べることができます。

current_userメソッド


こちらはログインユーザーのデータを取ってくる時に使用できます。

以下に例を記載します。

<a href="/users/<%= current_user.id %>">マイページ</a>

上記のように指定するとマイページに移動するリンクを作ることができます。

「current_user.id」の部分には、userテーブルに保存してあるuserの番号が付与されます。


ルーティングの設定


マイページに遷移するルーティングを設定します。

#usersテーブルからログインしているユーザーのidを取ってくる
命令がきたらuserコントローラーのshowアクションを動かす
get '/users/:id' => 'users#show'

マイページはログインしているユーザーのidが違う為、ログインしているユーザーのidを取ってくるようにルーティングに設定する必要があります。

これを先ほど書いた「application.html.erb」のコードと組み合わせるとマイページに遷移するルートができます。

<a href="/users/<%= current_user.id %>">マイページ</a>

まとめ

  • 「gem devise」をインストールするとログイン機能が使えるようになる
  • 「devise」専用のコマンドがある
  • 「devise」を実装すると使えるようになるメソッドがある
  • マイページのルーティングを記述する際は、userテーブルからidを取ってくるような記述をする

コメント

タイトルとURLをコピーしました