<<前 [TOP] 次>>
ログインとログアウトのためのセッションコントローラと管理者用のコントローラを追加します。
まずはセッションコントローラの作成です。
コマンドプロンプトで「rails generate controller Sessions new create destroy
」と入力します。
次に管理者用のコントローラ作成です。
コマンドプロンプトで「rails generate controller Admin index
」と入力します。
Sessionsコントローラcreate()メソッドを編集します。
「:user_id」をキーとしてUserオブジェクトのidをセッションに記録します。
destroy()メソッドにはログアウトした時の処理を実装します。
【app/controllers/sessions_controller.rb】
class SessionsController < ApplicationController def new end def create user = User.find_by_name(params[:name]) if user and user.authenticate(params[:password]) session[:user_id] = user.id redirect_to admin_url else redirect_to login_url, alert: '無効なユーザ/パスワードの組み合わせです。' end end def destroy session[:user_id] = nil redirect_to login_url, alert: "ログアウトしました。" end end
sessionsビューの「new.html.erb」を実装します。
【app/views/sessions/new.html.erb】
<% if flash[:alert] %> <div id="notice"><%= flash[:alert] %></div> <% end %> <br> <h1>Login ログイン</h1> <br> <%= form_tag do %> <div class="order_form"> <fieldset> <legend>ログインして下さい。</legend> <br> <div> <%= label_tag :name, 'ユーザ名' %> <%= text_field_tag :name, params[:name] %> </div> <div> <%= label_tag :password, 'パスワード' %> <%= password_field_tag :password, params[:password] %> </div> <div> <br> <%= submit_tag "ログイン" %> </div> </fieldset> </div> <% end %>
このフォームはモデルオブジェクトに直接関連付けられていません。
「form_for」を使わずに、通常のHTMLの「form」タグを作成する「form_tag」を使っています。
「input」タグを作成するために「text_field_tag」と「password_field_tag」を使用します。
このタイプのフォームを使えば、paramsの値をフォームのフィールドに直接関連付けすることが出来ます。
フォームフィールドの値がparamsを使ってコントローラとビューの間をやり取りします。
ユーザがログインしたらユーザの「id」をセッションに格納します。
管理画面のindexビューを実装します。
【app/views/admin/index.html.erb】
<h1>Login ログインしました。</h1> <br> <p>現在時刻:<%= Time.new %></p>
「config」フォルダにある「routes.rb」ファイルを編集します。
今まではモデルとルートの作成をscaffoldジェネレータに任せていましたが、今回のコントローラにはデータベースに基づいたモデルがないのでコントローラだけを作成しています。
そのため、「routes.rb」ファイルにアクション情報を指定する必要があります。
【config/routes.rb】
Rails.application.routes.draw do get 'admin' => 'admin#index' controller :sessions do get 'login' => :new post 'login' => :create delete 'logout' => :destroy end resources :users resources :orders resources :line_items resources :carts get 'market/index' resources :goods root :to => 'market#index', as: 'market' end
追加、変更したのは以下の部分です。
get 'admin' => 'admin#index' controller :sessions do get 'login' => :new post 'login' => :create delete 'logout' => :destroy end
「http://localhost:3000/login」にアクセスします。
↓↓クリックして頂けると励みになります。