LoginSignup
0
0

More than 3 years have passed since last update.

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

Last updated at Posted at 2020-09-24

前回 の続き。

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

手順

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)

0
0
0

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
  3. You can use dark theme
What you can do with signing up
0
0