Big first commit
Some checks failed
CI / scan_ruby (push) Has been cancelled
CI / scan_js (push) Has been cancelled
CI / lint (push) Has been cancelled
CI / test (push) Has been cancelled
CI / system-test (push) Has been cancelled

authentication-zero and first layout
This commit is contained in:
2026-05-21 02:54:39 +02:00
parent 6e7fe9797a
commit 6f192274ab
49 changed files with 1933 additions and 17 deletions

6
app/models/current.rb Normal file
View File

@@ -0,0 +1,6 @@
class Current < ActiveSupport::CurrentAttributes
attribute :session
attribute :user_agent, :ip_address
delegate :user, to: :session, allow_nil: true
end

8
app/models/event.rb Normal file
View File

@@ -0,0 +1,8 @@
class Event < ApplicationRecord
belongs_to :user
before_create do
self.user_agent = Current.user_agent
self.ip_address = Current.ip_address
end
end

11
app/models/session.rb Normal file
View File

@@ -0,0 +1,11 @@
class Session < ApplicationRecord
belongs_to :user
before_create do
self.user_agent = Current.user_agent
self.ip_address = Current.ip_address
end
after_create { user.events.create! action: "signed_in" }
after_destroy { user.events.create! action: "signed_out" }
end

45
app/models/user.rb Normal file
View File

@@ -0,0 +1,45 @@
class User < ApplicationRecord
@@min_length_password = 12
has_secure_password
generates_token_for :email_verification, expires_in: 2.days do
email
end
generates_token_for :password_reset, expires_in: 20.minutes do
password_salt.last(10)
end
has_many :sessions, dependent: :destroy
has_many :events, dependent: :destroy
validates :email, presence: true, uniqueness: true, format: { with: URI::MailTo::EMAIL_REGEXP }
validates :password, allow_nil: true, length: { minimum: @@min_length_password }
normalizes :email, with: -> { _1.strip.downcase }
before_validation if: :email_changed?, on: :update do
self.verified = false
end
after_update if: :password_digest_previously_changed? do
sessions.where.not(id: Current.session).delete_all
end
after_update if: :email_previously_changed? do
events.create! action: "email_verification_requested"
end
after_update if: :password_digest_previously_changed? do
events.create! action: "password_changed"
end
after_update if: [ :verified_previously_changed?, :verified? ] do
events.create! action: "email_verified"
end
def self.min_length_password
@@min_length_password
end
end