某サイトをrailsで作っています。
その際にdeviseで管理者画面を制作していたのですが、
/adminのurlで管理者画面にログインできるurlに変更したい。
deviseは通常、adminテーブルでテーブルを作ったら、ログインページは
admins/sign_in などのurlになってしまうわけです。これをurlをadminにするためにやったことを書きます。
管理者ログインページをdeviseで作るときにやること
私は以前にuserテーブルがある上で、別でadminを作ったことがあるのですが、(その場合user登録してる人の中で管理者権限を持っている人を指定しておくというやり方)
今回のようにuserがいない前提のadminを作るのは初めてでした。
deviseでまずadminを作るのですが、生成されるファイルの中でコメントアウトする必要があるコードがいくつかあります。(新規登録できてしまうと、urlにアクセスしてしまうと管理者が勝手に作られてしまうためログイン機能のみに限定します)
そのため、deviseでadminを生成したとしたら、
Model部分の
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :validatable
この↑registableと recoverbleを削除。
マイグレーションファイルの
## Recoverable
#t.string :reset_password_token ← コメントアウト
#t.datetime :reset_password_sent_at← コメントアウト
のrecoverble部分をコメントアウト
そして同ファイルの下の方に記述がまたあるのですが、
#:reset_password_token, unique: true ←コメントアウト!
と、この部分もコメントアウトします。私は↑これを忘れていました。
以上の設定が終わったら rails db:migrate
そしてurlを変更するときに必要だったこと
Rails.application.routes.draw do
devise_for :admin, skip: :sessions
devise_scope :admin do
get "/admin", to: "devise/sessions#new", as: :new_admin_session
post "/admin/sign_in", to: "devise/sessions#create", as: :admin_session
delete "/admin/sign_out", to: "devise/sessions#destroy", as: :destroy_admin_session
end
end
単純に、scopeにadmin do以下ルーティングを書けば良いと思っていたのですが、
skip: :sessions
これが必要だったんですね。
割と、色々調べてもこの表記がなしの記事が多かった気が。
今回は単純にログインのadmin_session_newだけをadminに変更したかったので、createの部分はそのままです。(createも同時にadminに変更することは不可能)
単純に管理者が簡単にadminをurlにつければ管理画面の認証ページに移れる、、という風にしたかったので、気にならないならurlはそのままでいいのかなと思います。
先日久々にqiita書きました。
下書きにしてたの忘れていました、その部分を加筆して書いたけど、何か抜けてるかもしれない、、、。
そしてやっぱりバックエンドも難しいし、フロントエンドも難しいし。総じてプログラミングって難しいな〜(よく私続いてるわ)