Installed authentication-zero
This commit is contained in:
6
app/models/current.rb
Normal file
6
app/models/current.rb
Normal 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/session.rb
Normal file
8
app/models/session.rb
Normal file
@@ -0,0 +1,8 @@
|
||||
class Session < ApplicationRecord
|
||||
belongs_to :user
|
||||
|
||||
before_create do
|
||||
self.user_agent = Current.user_agent
|
||||
self.ip_address = Current.ip_address
|
||||
end
|
||||
end
|
||||
26
app/models/user.rb
Normal file
26
app/models/user.rb
Normal file
@@ -0,0 +1,26 @@
|
||||
class User < ApplicationRecord
|
||||
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
|
||||
|
||||
validates :email, presence: true, uniqueness: true, format: { with: URI::MailTo::EMAIL_REGEXP }
|
||||
validates :password, allow_nil: true, length: { minimum: 12 }
|
||||
|
||||
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
|
||||
end
|
||||
Reference in New Issue
Block a user