Railsにsessionを実装するまで
sessionコントローラを作成する
rails g controller sessions
routesを定義する
Rails.application.routes.draw do
resources :sessions, only: [:new, :create, :destroy]
resources :users
end
ログインフォームのビューを作成する
<h1>Log in</h1>
<%= form_with(scope: :session, url: sessions_path, local: true) do |f| %>
<%= f.label :email %>
<%= f.email_field :email %>
<%= f.label :password %>
<%= f.password_field :password %>
<%= f.submit "Log in" %>
<% end %>
ユーザーIDを保存するメソッドを作成する
class SessionsController < ApplicationController
def create
user = User.find_by(email: params[:session][:email].downcase)
if user && user.authenticate(params[:session][:password])
# ログイン成功した場合
else
flash.now[:danger] = 'ログインに失敗しました'
render 'new'
end
end
end
全コントローラ上でsessionのモジュールを使用できるようする
class ApplicationController < ActionController::Base
protect_from_forgery with: :exception
include SessionsHelper
end
ログアウトの実装(セッションの削除)
class SessionsController < ApplicationController
~(省略)~
def destroy
session.delete(:user_id)
end
end