管理者機能の実装してみるよ(初心者)
はじめに
とうとう社会人になってしまった元大学生です。
社会人生活、2週間を終えましたが、いまのところは楽しいです。同期ともすごく仲良くなりプライベートでも話したりします。
そして、新しめのMacが配布されてウハウハしてました笑
そこで、久しぶり何か更新でもしようかなと思いアドミン機能の追加について記事にします。
管理者ログインの機能を実装
モデルの作成
まず最初にAdminモデルを作成します。
rails g devise Admin
Adminモデルを作成したら次にコントローラーを作っていきます。
コントローラー
管理者として処理するために独自のコントローラーをDevise用コントローラーとして作成します。
rails g devise:controllers admin
上記のコマンドを打つと、controllersの配下にadminフォルダが作成され、ファイルが作成されます。
ルーティングを設定
管理者のログイン画面では/admin/sign_in
というURLになるようにルーティングを設定していきます。
Rails.application.routes.draw do
- devise_for :admims #こちらは、削除
+ devise_for :admin, skip: [:registrations, :password], controllers: {
+ sessions: 'admin/sessions'
+ }
end
上記の記載ができたら、Viewを作成していきます。
Viewの編集
管理者用のDeviseのViewファイルを以下のコマンドで作成します。
rails g devise:views admins
コマンドの実行が完了すると、app/views/admins/ディレクトリにDevise関連のviewファイルが作成されます。 そして、作成された
adminsというフォルダ名を
admin` に変更してください。
次に、app/views/admin/sessions/new.html.erb
のみ修正を行います。
- <%= render "admins/shared/links" %> こちらのファイルパスを変更します。
+ <%= render "admin/shared/links" %>
そして、Deviseで作成されるViewファイルのフォームヘルパーはform_for
と記載されているので、現在推奨されているform_with
というコードに変更します。
<%- if controller_name != 'sessions' %>
<%= link_to "Log in", new_session_path(resource_name) %>
<% end %>
--------------------------------ここから削除--------------------------------
<%- if devise_mapping.registerable? && controller_name != 'registrations' %>
<%= link_to "Sign up", new_registration_path(resource_name) %>
<% end %>
<%- if devise_mapping.recoverable? && controller_name != 'passwords' && controller_name != 'registrations' %>
<%= link_to "Forgot your password?", new_password_path(resource_name) %>
<% end %>
<%- if devise_mapping.confirmable? && controller_name != 'confirmations' %>
<%= link_to "Didn't receive confirmation instructions?", new_confirmation_path(resource_name) %>
<% end %>
<%- if devise_mapping.lockable? && resource_class.unlock_strategy_enabled?(:email) && controller_name != 'unlocks' %>
<%= link_to "Didn't receive unlock instructions?", new_unlock_path(resource_name) %>
<% end %>
<%- if devise_mapping.omniauthable? %>
<%- resource_class.omniauth_providers.each do |provider| %>
<%= link_to "Sign in with #{OmniAuth::Utils.camelize(provider)}", omniauth_authorize_path(resource_name, provider), method: :post %>
<% end %>
<% end %>
--------------------------------ここまで削除--------------------------------
削除ができたら、次にマイグレーションを実行していきます。
マイグレーションの実行
rails db:migrate
上記のコマンドを打ったら、次にRails cで管理者ユーザーを作成します。
以下のコマンドをrails cで実行してください
Admin.create!(email: 'admin@example.com', password: 'password', password_confirmation: 'password')
これでユーザーが作成することができ、/admin/sign_in
のパスにアクセスするとログインすることができます。
ログインとログアウトの遷移先を指定
遷移先に関しては、admin/sessions_controller.r
のファイル内で設定します。
class Admin::SessionsController < Devise::SessionsController
protected
+ def after_sign_in_path_for(resource)
+ admin_dashboards_path #ログイン後にリダイレクトするパス
+ end
+ def after_sign_out_path_for(resource_or_scope)
+ new_admin_session_path #ログアウト後にリダイレクトするパス
+ end
end
上記の内容で管理者のログイン機能が実装できました。
まとめ
今回は、管理者のログイン機能について実装しました。
管理者の機能に関しては、次の記事で記載していきます。
またわからないことがありましたら自身でググってみてください。
Discussion