Railsにユーザ認証機能を追加(devise)
install
# Flexible authentication solution for Rails with Warden. gem 'devise'
bundle install bin/rails g devise:install
config/initializers/devise.eb ・・・ Deviseの設定を行うファイル config/locals/devise.en.yml ・・・ Deviseのローカライゼーション用ファイル
config/environments/development.rb
config.action_mailer.default_url_options = { host: 'localhost', port: 3000 }
root urlを指定: config/routes.rb
root to: "home#index"
Flash Messageを追加: app/views/layouts/application.html.slim
p.notice= notice p.alert= alert
View Fileを作成
bin/rails g devise:views
secret_keyの発行?
bin/rails secret f63f6ce0e65208abe21abeaa8d3db687836e850771d740b9e21ce4fd7960b97b640be6c45d92d8d10b9c4f681a4e4a0717928035d42d671073f7682a920057b8
Deviseに紐付いたモデルの作成
bin/rails g devise user
Deviceの利用するモジュールを指定: app/models/user.rb
class User < ApplicationRecord devise :database_authenticatable, :registerable, :recoverable, :rememberable, :validatable, :confirmable, :lockable, :timeoutable, :omniauthable end
MigrationFileを変更:
# frozen_string_literal: true class AddDeviseToUsers < ActiveRecord::Migration[6.0] def self.up change_table :users do |t| ## Database authenticatable t.string :email, null: false, default: "" t.string :encrypted_password, null: false, default: "" ## Recoverable t.string :reset_password_token t.datetime :reset_password_sent_at ## Rememberable t.datetime :remember_created_at ## Trackable t.integer :sign_in_count, default: 0, null: false t.datetime :current_sign_in_at t.datetime :last_sign_in_at t.inet :current_sign_in_ip t.inet :last_sign_in_ip # Confirmable t.string :confirmation_token t.datetime :confirmed_at t.datetime :confirmation_sent_at t.string :unconfirmed_email # Only if using reconfirmable # Lockable t.integer :failed_attempts, default: 0, null: false # Only if lock strategy is :failed_attempts t.string :unlock_token # Only if unlock strategy is :email or :both t.datetime :locked_at # Uncomment below if timestamps were not included in your original model. # t.timestamps null: false end add_index :users, :email, unique: true add_index :users, :reset_password_token, unique: true add_index :users, :confirmation_token, unique: true add_index :users, :unlock_token, unique: true end def self.down # By default, we don't want to make any assumption about how to roll back a migration when your # model already existed. Please edit below which fields you would like to remove in this migration. raise ActiveRecord::IrreversibleMigration end end
Migration
bundle exec rails db:migrate
Annotate
bundle exec annotate
erbをslimに追加
bundle exec erb2slim app/views/devise/ --delete