0
0

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 3 years have passed since last update.

deviseでログアウト時に確認ページに遷移させる

Posted at

はじめに

railsでdeviseをしようしたログインログアウト機能を実装していて、
ログアウトした際に確認ページに遷移するように実装していたところ
つまずいたので記事にしようと思います。
さらに良い方法とかがあればコメント欄か編集リクエストに記載願います。:bow_tone2:

バージョン情報

  • ruby 2.6.5
  • rails 6.0.3.3

前提条件

  • hamlでの記載(gem 'haml-rails')
  • deviseが導入済みでログインができている

コントローラーの変更

sessions_controllerのrespond_to_on_destroyがデフォルトで記述されていて
root_pathに遷移されるようになっていました。
なのでここのコードを削除します。
そこに**render '遷移先URL'**を記述することでURL先のページに遷移することができます。

# controllers/users/sessions_controller.rb

def destroy
  signed_out = (Devise.sign_out_all_scopes ? sign_out : sign_out(resource_name))
  set_flash_message! :notice, :signed_out if signed_out
  yield if block_given?
  respond_to_on_destroy #デフォルトの記述 ← コード削除
  render '遷移先URL' #renderで遷移先のURLを記述  コード記入
end

Viewの作成

私はusers/destoroyにdestroy.html.hamlファイルを作成しました。

%h1 ログアウトしました。
= link_to "マイページに戻る", "/"

destroy.png

コントローラーのカスタマイズ

**sesstions: "users/sessions"**を追記して、sessionsをカスタマイズしました!!

  devise_for :users, controllers: {
    registrations: "users/registrations",
    sessions: "users/sessions" #カスタマイズ
  }

ルーティングのカスタマイズ

ルーティングもカスタマイズします!
HTTPメソッド**:delete**, URL, コントローラー名#アクション名

  devise_scope :user do
    get 'profiles', to: 'users/registrations#new_profile'
    post 'profiles', to: 'users/registrations#create_profile'
    get 'addresses', to: 'users/registrations#new_address'
    post 'addresses', to: 'users/registrations#create_address'
    delete 'users/destroy', to: 'devise/sessions#destroy' #追記
  end

二つをあわせて
routes.rb


  devise_for :users, controllers: {
    registrations: "users/registrations",
    sessions: "users/sessions" #カスタマイズ
  }
  devise_scope :user do
    get 'profiles', to: 'users/registrations#new_profile'
    post 'profiles', to: 'users/registrations#create_profile'
    get 'addresses', to: 'users/registrations#new_address'
    post 'addresses', to: 'users/registrations#create_address'
    delete 'users/destroy', to: 'devise/sessions#destroy' #追記
  end

まとめ

まだまだMVCの理解がないと感じました。
冷静になって考えたらすぐに解決できた問題でした。
そして、マークダウン の書き方にも苦戦してます。
記事書くのにすごい時間かかってしまっているので早くなれなければ…
もっとアウトプットしていきます。

しょうま

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?