👋

アクセス制限public/admin・Deviseの新規登録失敗後のURLが/userのわけ

に公開

はじめに

不具合修正をしている中で今までとは少し違う手法が必要であったり、気づけて良かった点があったのでまとめておこうと思います。

public/adminそれぞれのアクセス制限

今まではuserを対象にしてログインしていないときにアクセスできないよう設定していたが、adminを追加したので少し記述方法を変える必要があります。

public側

userがログインしていないと各画面が表示されず、ログイン画面にリダイレクトされるようにします。
コントローラーにbefore_action :authenticate_user!を記述します。
それに加えてunless: :admin_urlによってadmin/~~のURLではない時というように条件を付けてあげるとpublic側だけに反映されるようになります。

application_controller.rb
before_action :authenticate_user!, unless: :admin_url

ちなみにautehntiateは、「認証する」という意味です。

admin側

application_controller.rb
before_action :authenticate_admin!, if: :admin_url

def admin_url
    request.fullpath.include?("/admin")
end

このように記述することで「pathに/adminが含まれている全てのページは、adminでログインしないと見れないよ。」となります。

新規登録失敗後のURLが/userのわけ

アクセス制限のチェックをしている時に新規登録画面でのURLは/users/sign_upと表示されていたが、入力ミスでエラーメッセージが表示されている時のURLは/usersに変わってしまいそこの画面でリロードを押すと普通にusersのindexページにとんでしまうエラーを発見しました。

対処法

結論から言うとルーティングに以下の記載をするだけでいいです。

config/routes.rb
Rails.application.routes.draw do
:
 # devise signup時のエラー解消
 get "users" => redirect("/users/sign_up")
:

参考にさせていただいた記事

https://qiita.com/ryo___eng/items/3430be74a3575db47659
https://qiita.com/misahiro33/items/f155c7f51de2ee2bd4fa

まとめ

新規登録画面でリロードする場面は少ないですが、気になったので調べて解消しました!
修正点を改善しているが、小さいミスやuserへの配慮が足りていないなと思う部分がかなりあったので少しづつ直していこうと思います!!

Discussion