ログイン機能をつくる [Ruby on Rails]
Rails6でログイン機能を作る方法です。今回はDeviseは使用しません。
関連記事:Deviseでログイン機能をつくる
作るもの

前提条件
今回はBootstrap4、Slimを使用します。 |
Bootstrap4、Slimの導入は
Rails6プロジェクトの各種初期設定をご覧ください。
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