Track neopass_email when logging in with NeoPass

Gonna use this in the Settings UI to communicate what NeoPass you're
connected to!
This commit is contained in:
Emi Matchu 2024-04-07 07:17:07 -07:00
parent 82aea20679
commit d5c3bc087e
3 changed files with 18 additions and 1 deletions

View file

@ -45,6 +45,8 @@ class AuthUser < AuthRecord
transaction do transaction do
find_or_create_by!(provider: auth.provider, uid: auth.uid) do |user| find_or_create_by!(provider: auth.provider, uid: auth.uid) do |user|
# This account is new! Let's do the initial setup.
# TODO: Can we somehow get the Neopets username if one exists, instead # TODO: Can we somehow get the Neopets username if one exists, instead
# of just using total randomness? # of just using total randomness?
user.name = build_unique_username user.name = build_unique_username
@ -55,6 +57,15 @@ class AuthUser < AuthRecord
# password recovery!) # password recovery!)
email_exists = AuthUser.where(email: auth.info.email).exists? email_exists = AuthUser.where(email: auth.info.email).exists?
user.email = auth.info.email unless email_exists user.email = auth.info.email unless email_exists
end.tap do |user|
# Additionally, whether this account is new or existing, make sure
# we've saved the latest email to `neopass_email`.
#
# We track this separately from `email`, which the user can edit, to
# use in the Settings UI to indicate what NeoPass you're linked to. (In
# practice, this *shouldn't* ever change after initial setup, because
# NeoPass emails are immutable? But why not be resilient!)
user.update!(neopass_email: auth.info.email)
end end
end end
end end

View file

@ -0,0 +1,5 @@
class AddNeoPassEmailToUsers < ActiveRecord::Migration[7.1]
def change
add_column :users, :neopass_email, :string
end
end

View file

@ -10,7 +10,7 @@
# #
# It's strongly recommended that you check this file into your version control system. # It's strongly recommended that you check this file into your version control system.
ActiveRecord::Schema[7.1].define(version: 2024_04_01_124406) do ActiveRecord::Schema[7.1].define(version: 2024_04_07_135246) do
create_table "users", id: { type: :integer, unsigned: true }, charset: "utf8mb3", collation: "utf8mb3_general_ci", force: :cascade do |t| create_table "users", id: { type: :integer, unsigned: true }, charset: "utf8mb3", collation: "utf8mb3_general_ci", force: :cascade do |t|
t.string "name", limit: 30, null: false t.string "name", limit: 30, null: false
t.string "encrypted_password", limit: 64 t.string "encrypted_password", limit: 64
@ -31,6 +31,7 @@ ActiveRecord::Schema[7.1].define(version: 2024_04_01_124406) do
t.datetime "remember_created_at" t.datetime "remember_created_at"
t.string "provider" t.string "provider"
t.string "uid" t.string "uid"
t.string "neopass_email"
t.index ["email"], name: "index_users_on_email", unique: true t.index ["email"], name: "index_users_on_email", unique: true
t.index ["reset_password_token"], name: "index_users_on_reset_password_token", unique: true t.index ["reset_password_token"], name: "index_users_on_reset_password_token", unique: true
t.index ["unlock_token"], name: "index_users_on_unlock_token", unique: true t.index ["unlock_token"], name: "index_users_on_unlock_token", unique: true