Sha256: d7e5e2acac5e8f8465113904e1661e28e8cf46372aa508b40a4c5860990a82a9

Contents?: true

Size: 1.92 KB

Versions: 4

Compression:

Stored size: 1.92 KB

Contents

class User < ApplicationRecord
  has_secure_password
  <%- if options.tenantable? %>
  belongs_to :account
  <%- end -%>

  has_many :email_verification_tokens, dependent: :destroy
  has_many :password_reset_tokens, dependent: :destroy
  has_many :sessions, dependent: :destroy
  <%- if two_factor? -%>
  has_many :recovery_codes, dependent: :destroy
  <%- end -%>
  <%- if webauthn? -%>
  has_many :security_keys, dependent: :destroy
  <%- end -%>
  <%- if passwordless? -%>
  has_many :sign_in_tokens, dependent: :destroy
  <%- end -%>
  <%- if options.trackable? -%>
  has_many :events, dependent: :destroy
  <%- end -%>

  validates :email, presence: true, uniqueness: true, format: { with: URI::MailTo::EMAIL_REGEXP }
  validates :password, allow_nil: true, length: { minimum: 12 }
  <%- if options.pwned? -%>
  validates :password, not_pwned: { message: "might easily be guessed" }
  <%- end -%>

  before_validation if: -> { email.present? } do
    self.email = email.downcase.strip
  end

  before_validation if: :email_changed?, on: :update do
    self.verified = false
  end
  <%- if two_factor? %>
  before_validation on: :create do
    self.otp_secret = ROTP::Base32.random
  end
  <%- end -%>
  <%- if webauthn? %>
  before_validation on: :create do
    self.webauthn_id = WebAuthn.generate_user_id
  end
  <%- end -%>
  <%- if options.tenantable? %>
  before_validation on: :create do
    self.account = Account.new
  end
  <%- end -%>

  after_update if: :password_digest_previously_changed? do
    sessions.where.not(id: Current.session).delete_all
  end
  <%- if options.trackable? %>
  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
  <%- end -%>
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
authentication-zero-2.16.36 lib/generators/authentication/templates/models/user.rb.tt
authentication-zero-2.16.35 lib/generators/authentication/templates/models/user.rb.tt
authentication-zero-2.16.34 lib/generators/authentication/templates/models/user.rb.tt
authentication-zero-2.16.33 lib/generators/authentication/templates/models/user.rb.tt