LoginSignup
0

More than 1 year has passed since last update.

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

Last updated at Posted at 2020-09-23

はじめに

rails tutorialで使われているE-mailとパスワードを使ったログインより、もっとシンプルに実装する。
deviseなどのgemは使わない。

前提

  • rails tutorialなど基本的なrailsの知識
  • Mac
  • Ruby on Rails6
  • テストは省略

目標

ここではRoomテーブルの名前とパスワードを使ってログインする。

手順

まずログインするモデルを作成する。今回はRoomテーブル

MacBook % rails g model Room name:string

生成されたマイグレーションファイルに追記し、マイグレーションをかける
これによって、空の名前はデータベースに保存できなくなる

/db/migrate/タイムスタンプ.create_rooms.rb

class CreateRooms < ActiveRecord::Migration[6.0]
  def change
    create_table :rooms do |t|
      t.string :name, null: false

      t.timestamps
    end
  end
end
MacBook % rails db:migrate

Room.rbにhas_secure_passwordのメソッドを追加する

/app/models/room.rb

class Room < ApplicationRecord
  validates :name, presence: true, length: { maximum: 50 }
  has_secure_password
end

password_digestカラムを追加するマイグレーションを作成し、マイグレーションをかける

MacBook % rails generate migration add_password_digest_to_rooms password_digest:string
MacBook % rails db:migrate
  • Gemfileを開き、gem 'bcrypt'のコメントアウトを解除しinstallする

/Gemfile

~
# gem 'redis', '~> 4.0'
# Use Active Model has_secure_password
gem 'bcrypt', '~> 3.1.7'

# Use Active Storage variant
# gem 'image_processing', '~> 1.2'
~
  • 空のpasswordと最低文字数を追加で制限する

/app/models/room.rb

class Room < ApplicationRecord
  validates :name, presence: true, length: { maximum: 50 }
  has_secure_password
  validates :password, presence: true, length: { minimum: 6 }
end
  • Rails console でインスタンスが生成、データベースに保存できるか確認する
  • サーバーを立ち上げているのとは別のターミナルから
MacBook % rails c  
~
irb(main):001:0> @room = Room.new(name:"tokyoroom",password:"password",password_confirmation:"password")
   (2.2ms)  SET NAMES utf8mb4,  @@SESSION.sql_mode = CONCAT(CONCAT(@@sql_mode, ',STRICT_ALL_TABLES'), ',NO_AUTO_VALUE_ON_ZERO'),  @@SESSION.sql_auto_is_null = 0, @@SESSION.wait_timeout = 2147483
=> #<Room id: nil, name: "tokyoroom", created_at: nil, updated_at: nil, password_digest: [FILTERED]>
irb(main):002:0> @room.save
   (0.7ms)  BEGIN
  Room Create (3.3ms)  INSERT INTO `rooms` (`name`, `created_at`, `updated_at`, `password_digest`) VALUES ('tokyoroom', '2020-09-23 07:26:30.787094', '2020-09-23 07:26:30.787094', '$2a$12$SmCtpmRZn0M5BMtuT6BmAOKO.DMAmMOIYSXoHlxDrSbA2AQcAYnMC')
   (5.0ms)  COMMIT
=> true

続き[2]

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

参考文献

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