LoginSignup
0
0

More than 3 years have 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)

参考文献

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