前回 の続き。
ここからログイン画面とログイン処理を実装していく
手順
Sessionコントローラを作成する
MacBook % rails g controller Sessions new
以下のようにroutesファイルを編集
/config/routes
Rails.application.routes.draw do
get '/login', to: 'sessions#new'
post '/login', to: 'sessions#create'
delete '/logout', to: 'sessions#destroy'
~
次にログインフォームを作っていく。今回はBootstrapなどをつかってない直書き。
/app/views/sessions/new.html.erb
<body>
<h1>Login</h1>
<%= form_for(:session, url: login_path) do |f| %>
<div class="input-name">
<%= f.label :password, '部屋の名前' %>
<%= f.text_field :name, placeholder: "部屋の名前を入力してください" %>
</div>
<div class="form-group">
<%= f.label :password, 'パスワード' %>
<%= f.password_field :password, placeholder: 'パスワードを入力してください' %>
<%= f.submit 'ログイン' %>
</div>
<% end %>
</body>
フォームをつくり、http://localhost:3000/login にアクセスし確認
確認できたら、次にコントローラのアクションにcreateとdestroyアクションを追加する
/app/controllers/sessions_controller.rb
class SessionsController < ApplicationController
def new
end
def create
room = Room.find_by(name: params[:session][:name])
if room && room.authenticate(params[:session][:password])
else
end
end
def destroy
end
end
createアクションのログイン失敗時の処理を書いていく。(bootstrapなどは不使用)
app/controllers/sessions_controller.rb
~
def create
room = Room.find_by(name: params[:session][:name])
if room && room.authenticate(params[:session][:password])
else
flash[:alert] = '名前かパスワードが違います'
redirect_to '/login'
end
end
~
ブラウザを閉じると自動的に有効期限が切れるsessionhelperの追加
/app/controllers/application_controller.rb
class ApplicationController < ActionController::Base
include SessionsHelper
end
ヘルパーメソッド、log_inメソッドを定義する
/app/helpers/sessions_helper.rb
module SessionsHelper
#ブラウザ内の一時cookiesに暗号化済みのroomIDを格納
def log_in(room)
session[:room_id] = room.id
end
end
これによってログインできるようになったので、createアクションを定義する
/app/controllers/sessions_controller.rb
~
def create
room = Room.find_by(name: params[:session][:name])
if room && room.authenticate(params[:session][:password])
log_in room
redirect_to receptions_path
else
flash[:alert] = '名前かパスワードが違います'
redirect_to '/login'
end
end
~
ブラウザの画面からログインができるようになりました。
続き
[Railsでログイン機能をシンプルに名前とパスワードだけで実装する(3)]
(https://qiita.com/yongjugithub/items/dbb880f085f99cc9af93)