LoginSignup
280
303

More than 5 years have passed since last update.

【Rails】deviseを導入してみる

Last updated at Posted at 2018-11-08

deviseとは

Rubyのgem(ライブラリ)の1つ。
ログイン機能の実装を簡単にしてくれるgem
今回私はFacebookAPIを使用したログインを実装するために使ってみた。

使ってみる

実際にdeviseを使用してログイン周りのページを作成していく

インストール

Gemfileに追記

Gemfile
gem 'devise'

bundle install実行

$ bundle install

依存するファイルも一緒に作成

$ rails g devise:install

Usersモデルを作成

$ rails g devise user

マイグレーションファイルを見てみると、
emailとパスワード用のカラムは自動で生成されるようになっているので、
他に追加したいものがあればここでマイグレーションファイルに追記。

マイグレーションを実行。

$ rake db:migrate

ここまででとりあえずhttp://localhost:3000/users/sign_inを開くと
最低限のログインページは完成する。

しかし、ビューなどをカスタマイズしたい場合は加えて次項以降の作業も必要。

deviseに対応したビューの作成

コマンドで一発

$ rails g devise:views users

ビューをカスタマイズしたい場合はここで生成されたファイルを編集すれば良い。

deviseに対応したコントローラの作成

同様にターミナルでコマンドを実行

$ rails g devise:controllers users

今回自分は会員登録後のリダイレクト先をユーザのプロフィール画面に変更したかったので、以下のように修正。

app/controllers/users/registrations_controller.rb
# プロフィール画面用のアクションを追加
def detail
  @user = User.find_by(id: params[:id])
end

# protected

# ここのコメントアウトを外してリダイレクト先を指定
# ルートパス名でも良い
# The path used after sign up.
def after_sign_up_path_for(resource)
  "/user/#{current_user.id}"
end

ログイン後のリダイレクト先もついでに変更してみる。

application_controller.rb
class ApplicationController < ActionController::Base
  before_action :configure_permitted_parameters, if: :devise_controller?

  # このアクションを追加
  def after_sign_in_path_for(resource)
    "/user/#{current_user.id}"
  end

  protected

  # 入力フォームからアカウント名情報をDBに保存するために追加
  def configure_permitted_parameters
    devise_parameter_sanitizer.permit(:sign_up, keys: [:name])
  end
end

ルーティングの編集

routes.rbに以下の記述を追加。

route.rb
devise_for :users, :controllers => {
  :registrations => 'users/registrations',
  :sessions => 'users/sessions'   
} 

devise_scope :user do
  get "user/:id", :to => "users/registrations#detail"
  get "signup", :to => "users/registrations#new"
  get "login", :to => "users/sessions#new"
  get "logout", :to => "users/sessions#destroy"
end

ビューファイルと対応するページ

ファイルパス 機能
sessions/new.html.erb ログイン画面
registrations/new.html.erb ユーザ登録画面
registrations/edit.html.erb プロフィール情報変更画面
passwords/new.html.erb メール送信画面(パスワード変更用)
passwords/edit.html.erb パスワード変更画面
confirmations/new.html.erb メールによる認証を行う画面
unlocks/new.html.erb アカウントのアンロック画面

加えて

ログインユーザのIDは、
current_user.id で取得することができる。
また、ユーザがログイン済みかどうかは、
user_signed_in? によってtrueかfalseを得ることができる。

280
303
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
280
303