3
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Deviseの認証とマイページを導入してみる

Posted at

毎回導入時に迷子になっていたので、自分用の備忘録として残します。

環境

  • 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
account_sign_up.png

マイページを作成

$ 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
account_page.png

ログアウト機能作成

わかりやすいように 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/

logout.png login.png 以上です。
3
4
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
3
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?