class FirebaseRubyAuth

Interacts with data from Firebase

Public Class Methods

new(firebase_project_id) click to toggle source
# File lib/firebase_ruby_auth.rb, line 10
def initialize(firebase_project_id)
  @firebase_project_id = firebase_project_id
  @public_cert = GooglePublicCert.new
end

Public Instance Methods

decode_token(token) click to toggle source

token would be a user's ID token firebase.google.com/docs/auth/admin/verify-id-tokens This will either return a hash with user data, or an empty hash

# File lib/firebase_ruby_auth.rb, line 18
def decode_token(token)
  return {} if @public_cert.keys.empty?

  token_values = begin
                   JWT.decode(token, nil, true, options).first
                 rescue JWT::JWKError
                   {}
                 rescue JWT::DecodeError
                   {}
                 end
  valid?(token_values) ? token_values : {}
end

Private Instance Methods

options() click to toggle source
# File lib/firebase_ruby_auth.rb, line 31
        def options
  {
    algorithms: ['RS256'],

    aud: @firebase_project_id,
    verify_aud: true,

    verify_iat: true,

    iss: "https://securetoken.google.com/#{@firebase_project_id}",
    verify_iss: true,

    jwks: @public_cert.keys
  }
end
valid?(token_values) click to toggle source
# File lib/firebase_ruby_auth.rb, line 47
        def valid?(token_values)
  token_values['sub'].present? &&
  token_values['auth_time'].present? &&
  token_values['auth_time'].to_i < Time.now.utc.to_i
end