👋
アクセス制限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")
:
参考にさせていただいた記事
まとめ
新規登録画面でリロードする場面は少ないですが、気になったので調べて解消しました!
修正点を改善しているが、小さいミスやuserへの配慮が足りていないなと思う部分がかなりあったので少しづつ直していこうと思います!!
Discussion