11:ログイン機能をつける

基本方針:これから作るrailsアプリは社内の特定部署の社員しか使わないので、userのデーターベースは作りますが、大げさなgemやrails8から実装されたauthenticationなどは使わず、管理者が直接データーベースにアクセスし、ユーザー名とパスワードを作るようにし、アプリ側からは新規作成、編集、削除など一切作らないようにします。
まずはデーターベースの作成
[fuji@rails8 TourData]$ rails g model user name:string password_digest:string
invoke active_record
create db/migrate/20250820061510_create_users.rb
create app/models/user.rb
invoke test_unit
create test/models/user_test.rb
create test/fixtures/users.yml
[fuji@rails8 TourData]$ rails db:migrate
== 20250820061510 CreateUsers: migrating ======================================
— create_table(:users)
-> 0.0873s
== 20250820061510 CreateUsers: migrated (0.0875s) =
password_digestに注意してください。これは平文でパスワードを入れると、データーベースには暗号化した文字列が入るようになる。
そのためにGEMが必要になるので
[fuji@rails8 TourData]$ gedit Gemfile

# Use Active Storage variants [https://guides.rubyonrails.org/active_storage_overview.html#transforming-images]
# gem “image_processing”, “~> 1.2”
gem “spring-commands-rspec” → これは前に入れた
gem “bcrypt”           → これを追記
group :development, :test do
でお約束の
[fuji@rails8 TourData]$ bundle

で最初にtestユーザーでも作っておく、railsコンソールで作るがその前にusers.rbを設定しておく
[fuji@rails8 TourData]$ gedit app/models/user.rb
class User < ApplicationRecord
   has_secure_password              → これを追記
   validates :name, prsence: true, uniqueness: true → これを追記
end
[fuji@rails8 TourData]$ rails c
tour-data(dev)> User.new( name: ‘ユーザー名’, password: ‘パスワード’, password_confirmation: ‘パスワード’).save
TRANSACTION (0.2ms) BEGIN /*application=’TouData’*/
User Create (1.0ms) INSERT INTO `users` (`name`, `password_digest`, `created_at`, `updated_at`) VALUES 後略
そしてデーターベースにログインし、ユーザーが出来ているか確認した。

ログイン画面を作るが、rails ではセッションを使うので
[fuji@rails8 TourData]$ rails g controller Sessions new
create app/controllers/sessions_controller.rb
  route get “sessions/new”
  invoke erb
  create app/views/sessions
後略
routeの変更するがログイン画面を/loginにしたいので
[fuji@rails8 TourData]$ gedit config/routes.rb
Rails.application.routes.draw do
 #get “sessions/new”       コメントアウトし
 get “/login”, to: “sessions/new”  これを追記
後略
テンプレートを作る
[fuji@rails8 TourData]$ gedit /app/views/sessions.new.html.erb
<h1>ログイン</h1>
<%= form_for(:session, url: login_path) do |f| %>
 <%= f.label :name %>
 <%= f.name_field :name %>
 <%= f.label :password %>
 <%= f.password_field :password %>
 <%= f.submit “Log in” %>
<% end %>

フジマル について

1947年生れ、東京電機大学二部電気通信工学科卒、最後はスリランカ航空で営業だったのですが2018年に㈱インパック・ジャパンに再就職。趣味:登山、スキー、車いじり、コンピューター
カテゴリー: Ruby on railsに挑戦(almalinux9) パーマリンク

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA


このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください