毎回導入時に迷子になっていたので、自分用の備忘録として残します。
環境
- rails (6.0.0)
- devise (4.7.1)
- devise-i18n (1.8.2)
Devise で認証とマイページを導入してみる
作業ディレクトリの用意
$ mkdir devise-demo
$ cd devise-demo/
アプリケーション作成
Rails アプリの初期設定を行う
$ bundle init
$ bundle add rails
$ bundle exec rails new . -d mysql
$ bundle
$ bundle update
$ bin/rails db:create
$ bin/rails webpacker:install
Devise 導入
Gemfile に Devise を追加
Gemfile
# 下記を追記
gem 'devise'
gem 'devise-i18n'
Devise をインストール
$ bundle
Devise の初期設定
$ bin/rails g devise:install
config/environments/development.rb
Rails.application.configure do
# 以下を追記
config.action_mailer.default_url_options = { host: 'localhost', port: 3000 }
app/views/layouts/application.html.erb
<body>
# 以下を追記
<p class="notice"><%= notice %></p>
<p class="alert"><%= alert %></p>
認証用モデルを作成
今回は User モデルを作成
$ bin/rails g devise User
$ bin/rails db:migrate
Devise のカスタムコントローラを作成
今回は scope を auths にする
$ bin/rails g devise:controllers auths
account/*
のようなパスでアクセスできるようにする
config/routes.rb
Rails.application.routes.draw do
# 以下を追記
devise_for :users,
path: 'account',
path_names: { sign_in: :login, sign_out: :logout },
controllers: {
confirmations: 'auths/confirmations',
passwords: 'auths/passwords',
registrations: 'auths/registrations',
sessions: 'auths/sessions'
}
Devise のカスタムビューを作成
$ bin/rails g devise:i18n:views auths
$ bin/rails g devise:i18n:locale ja
config/locales/devise.views.ja.yml
# devise: という部分を auths: に変更
# 修正前
devise:
# 修正後
auths:
config/initializers/locale.rb
I18n.load_path += Dir[Rails.root.join('lib', 'locale', '*.{rb,yml}')]
I18n.available_locales = [:ja]
I18n.default_locale = :ja
Rails を起動
$ bin/rails s
下記にアクセスすると、アカウント登録ページが表示される
http://localhost:3000/account/sign_up
マイページを作成
$ bin/rails g controller accounts show
config/routes.rb
resource :account, only: [:show]
app/controllers/accounts_controller.rb
class AccountsController < ApplicationController
before_action :authenticate_user!
def show
@account = current_user
end
end
マイページのビューを作成する
app/views/accounts/show.html.erb
<h1>MyPage</h1>
<p><%= @account.email %></p>
Rails を起動
$ bin/rails s
下記にアクセスすると、マイページにアクセスできる。※ ログイン必須
http://localhost:3000/account
ログアウト機能作成
わかりやすいように root path をマイページにする
config/routes.rb
root 'accounts#show'
ログイン/ログアウトのリンクを用意する
app/views/layouts/application.html.erb
<% if user_signed_in? %>
<%= link_to 'Logout', destroy_user_session_path, method: :delete %>
<% else %>
<%= link_to 'Login', user_session_path %>
<% end %>
Rails を起動
$ bin/rails s
下記にアクセスすると、ログイン/ログアウトできるリンクが表示される。
http://localhost:3000/