mirror of
https://github.com/Freika/dawarich.git
synced 2026-01-10 01:01:39 -05:00
37 lines
867 B
Ruby
37 lines
867 B
Ruby
# frozen_string_literal: true
|
|
|
|
module Omniauthable
|
|
extend ActiveSupport::Concern
|
|
|
|
class_methods do
|
|
def from_omniauth(access_token)
|
|
data = access_token.info
|
|
provider = access_token.provider
|
|
uid = access_token.uid
|
|
|
|
# First, try to find user by provider and uid (for linked accounts)
|
|
user = find_by(provider: provider, uid: uid)
|
|
|
|
return user if user
|
|
|
|
# If not found, try to find by email
|
|
user = find_by(email: data['email'])
|
|
|
|
if user
|
|
# Update provider and uid for existing user (first-time linking)
|
|
user.update!(provider: provider, uid: uid)
|
|
return user
|
|
end
|
|
|
|
# Create new user if not found
|
|
user = create(
|
|
email: data['email'],
|
|
password: Devise.friendly_token[0, 20],
|
|
provider: provider,
|
|
uid: uid
|
|
)
|
|
|
|
user
|
|
end
|
|
end
|
|
end
|