ホーム > カテゴリ > Ruby・Ruby on Rails >

ログイン機能をつくる [Ruby on Rails]

Rails6でログイン機能を作る方法です。今回はDeviseは使用しません。

作るもの

前提条件

今回はBootstrap4、Slimを使用します。

Bootstrap4、Slimの導入は
Rails6プロジェクトの各種初期設定をご覧ください。

1. 初期設定

// Userモデルの作成(モデル/マイグレーションファイルの生成)
bin/rails g model User name:string email:string password_digest:string admin:boolean

// マイグレーションの実行(テーブルの生成)
bin/rails  db:migrate

//  コントローラー/ビューの生成
bin/rails g controller login new

// bundle install
Gemfileのgem 'bcrypt'のコメントを外してbundleを行う。

2. 各コード

2-1. app/models/user.rb

class User < ApplicationRecord

  validates :name, presence: true
  validates :email, presence: true, uniqueness: true  

  # password_digest用
  has_secure_password
    
end

2-2. app/views/layouts/application.html.slim

doctype html
html
  head
    = csrf_meta_tags
    = csp_meta_tag
    = stylesheet_link_tag 'application', media: 'all'
    = javascript_pack_tag 'application'
  body
    .container  
      - if flash.notice.present?
        .alert.alert-success= flash.notice    
      - if flash.alert.present?
        .alert.alert-danger= flash.alert  
        
      = yield

2-3. app/views/login/new.html.slim

p
h1 ログイン
p

- if session[:user_id].present?
  p
    span = session[:user_name].to_s + 'さんでログインしています。' 
    span = link_to 'ログアウト', logout_path, method: :delete
      
p
= form_with scope: :login, local: true do |f|
  .form-group
    = f.label :email, 'メールアドレス'
    = f.text_field :email, class: 'form-control', id: 'login_email'
  .form-group
    = f.label :password, 'パスワード'
    = f.password_field :password, class: 'form-control', id: 'login_password'
  = f.submit 'ログインする', class: 'btn btn-primary'

2-4. app/controllers/login_controller.rb

class LoginController < ApplicationController
  def new
  end
  
  def create
    user = User.find_by(email: login_params[:email])

    # パスワードの認証
    if user&.authenticate(login_params[:password])
      session[:user_id] = user.id
      session[:user_name] = user.name
      redirect_to login_path, notice: 'ログインしました。'
    else
      render :new
    end
  end
    
  def destroy
    reset_session
    redirect_to login_path, notice: 'ログアウトしました。'      
  end
    
  private

  def login_params
    params.require(:login).permit(:email, :password)
  end    
end

2-5. config/routes.rb

Rails.application.routes.draw do
  get  '/login', to: 'login#new'
  post '/login', to: 'login#create'
  delete '/logout', to: 'login#destroy'
end

ルーティング名(xxx_path)は「rake routes」で確認できます。

3. Railsコンソール

Railsコンソールでユーザーを作成します。

// Railsコンソール
bin/rails c

// ユーザーを追加する
user = User.new(name: '名前', email: 'info@example.com',password: 'パスワード', password_confirmation:'パスワード', admin: true)

// 保存
user.save

// コンソールの終了
exit

4. テストする

http://localhost:3000/loginにアクセスして試すだけです。

参考文献

現場で使える Ruby on Rails 5速習実践ガイド





関連記事



公開日:2019年11月01日 最終更新日:2019年12月02日
記事NO:02800


この記事を書いた人

💻 ITスキル・経験
サーバー構築からWebアプリケーション開発。IoTをはじめとする電子工作、ロボット、人工知能やスマホ/OSアプリまで分野問わず経験。

画像処理/音声処理/アニメーション、3Dゲーム、会計ソフト、PDF作成/編集、逆アセンブラ、EXE/DLLファイルの書き換えなどのアプリを公開。詳しくは自己紹介へ
プチモンテ代表、アーティスト名:プチモンテ
🎵 音楽制作
BGMは楽器(音源)さえあれば、何でも制作可能。歌モノは主にロック、バラード、ポップスを制作。歌詞は叙情詩、叙情的な楽曲が多い。楽曲制作は2023年12月中旬 ~

オリジナル曲を始めました✨

YouTubeで各楽曲を公開しています🌈
https://www.youtube.com/@petitmonte

【男性ボーカル】DA・KA・RA | 新たな明日が風と共に訪れる

【男性、女性ボーカル】時空を超越する先に | 時空と風の交響曲

【女性、男性ボーカル】絆 | 穏やかな心に奏でる旋律