2311efd03e
Previously if someone started signing in on their phone, but finished it on their laptop, they'd end up on the menu screen with no account. Bu tracking the purpose of a Magic Link we can always direct the user to sign up if they requested a magic link through sign up. This also makes the logic for changing the copy in the email more robust.
28 lines
714 B
Ruby
28 lines
714 B
Ruby
class Identity < ApplicationRecord
|
|
include Joinable, Transferable
|
|
|
|
has_many :magic_links, dependent: :destroy
|
|
has_many :sessions, dependent: :destroy
|
|
has_many :users, dependent: :nullify
|
|
has_many :accounts, through: :users
|
|
|
|
has_one_attached :avatar
|
|
|
|
before_destroy :deactivate_users
|
|
|
|
normalizes :email_address, with: ->(value) { value.strip.downcase.presence }
|
|
|
|
def send_magic_link(**attributes)
|
|
attributes[:purpose] = attributes.delete(:for) if attributes.key?(:for)
|
|
|
|
magic_links.create!(attributes).tap do |magic_link|
|
|
MagicLinkMailer.sign_in_instructions(magic_link).deliver_later
|
|
end
|
|
end
|
|
|
|
private
|
|
def deactivate_users
|
|
users.find_each(&:deactivate)
|
|
end
|
|
end
|