This gives us more flexibility and allows us to use password authentication later. Also we don't need to build the login functionality ourself.
29 lines
793 B
Ruby
29 lines
793 B
Ruby
class Authentication < ApplicationRecord
|
|
belongs_to :user
|
|
|
|
scope :for, -> (provider) { where(provider: provider) }
|
|
|
|
encrypts :access_token
|
|
encrypts :refresh_token
|
|
|
|
def expired?
|
|
expires_at <= Time.current
|
|
end
|
|
|
|
def google_authorization
|
|
return nil unless provider == 'google'
|
|
@google_authorization ||= CLIENT_SECRETS.to_authorization.tap do |c|
|
|
c.access_token = self.access_token
|
|
c.refresh_token = self.refresh_token
|
|
c.expires_at = self.expires_at
|
|
if expires_at < 1.minute.from_now
|
|
c.refresh!
|
|
self.access_token = c.access_token if c.access_token.present?
|
|
self.refresh_token = c.refresh_token if c.refresh_token.present?
|
|
self.expires_at = Time.at(c.expires_at) if c.expires_at.present?
|
|
end
|
|
end
|
|
end
|
|
|
|
end
|