LoginSignup
0

More than 1 year has passed since last update.

posted at

updated at

Railsでログイン機能をシンプルに名前とパスワードだけで実装したメモ(2)

前回 の続き。

ここからログイン画面とログイン処理を実装していく

手順

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)

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
0