2016-08-10 34 views
5

Android Uygulamamda Firebase Auth'u tamamen entegre ettim, şimdi istemcinin benzersiz bir Token kullanarak arka tarafım (raylar) ile etkileşime geçmesini istiyorum. benim sorum nasıl yapıldığını şudur:,Rails ile Firebase Kimlik Doğrulama Nasıl Yapılır?

  1. Kullanıcı giriş yapmadığı, örneğin Facebook Auth için kullanan
  2. arkayüz ve benzersiz bir Token için birlikte müşteriye o
  3. Yanıtla'yı doğrulamak için Firebase Token Gönder
  4. yaklaşan Api istekleri

Sen adım 3. gerekmez size

cevap

1

ederiz (... kullanıcı verileri kaydetmek, kullanıcıların veri almak). Firebase Auth Android SDK getToken() API, giriş kullanıcısı için kısa ömürlü (bir saat) Firebase Kimlik Doğrulama Simgesini döndürür ve bir öncekinin süresi dolduğunda otomatik olarak yeni bir jeton döndürür.

Firebase token verification doc, istemci uygulamasında bir Firebase belirteci nasıl alınacağını ve sunucu tarafında belirteci doğruladığını gösterir. Eğer, android kodunda Token almak için arka uç göndermek kez ileri JinLiu cevabını alarak

+0

yukarıda belirtilen doc yok Raylar uygulanması –

0

ki: https://www.yourbackend.com?authenticate?token=asdad7687h ... Firebase tarafından oluşturulan bir jeton bir JWT belirteç olduğunu Not olduğunu, öncelikle onun doğruluğu gerek ve arka uçta deşifre edin. Bunun için gemfile gem 'jwt', '1.5.6' gem 'rest-client', '2.0.1' bu iki değerli taşları eklemeniz gerekir. kumandanızda olarak) fonksiyonu: kullanıcı geçerli belirteci varsa

def get_set_user 
    begin 
     token = params[:token] 
     if token.nil? 
      @user = nil 
      return 
     end 
     firebase_id = verify_user(token)[0]["user_id"] 
     if User.where(:firebase_id => firebase_id).exists? 
      @user = User.where(:firebase_id => firebase_id).first 
     else 
      @user = User.new(:firebase_id => firebase_id) 
      @user.save 
      @user 
     end 
    rescue 
     @user = nil 
    end 
end 

def verify_user(token) 
    certificate_url = "https://www.googleapis.com/robot/v1/metadata/x509/[email protected]" 
    myresponse = RestClient.get(certificate_url).body 
    certificates = JSON.parse myresponse.gsub('=>', ':') 
    myjson ="" 
    certificates.each do|key , value| 
    begin 
     x509 = OpenSSL::X509::Certificate.new(value) 
     iss = 'https://securetoken.google.com/<yourdomain>' 
     aud = 'yourdomain' # change this 
     myjson = JWT.decode(token, x509.public_key, true, 
     {    algorithm: "RS256", verify_iat: true , 
         iss: iss , verify_iss: true , 
         aud: aud , verify_aud: true 
     }) 

     return myjson 

    rescue 
    end 
    end 

    return nil  

end 

Şimdi, aksiyon görmek için daha önce olduğu gibi get_set_user çağırabilir. Fikir basit. Belirtecin https://www.googleapis.com/robot/v1/metadata/x509/[email protected]'da belirtilen anahtarlardan biri tarafından imzalanmış olup olmadığını kontrol edin. Evetse, belirteci deşifre edin ve firebase kimliğini alın.

0

firebase_id_token gem'i geliştirdim.
Tüm sertifika/imza işleriyle ilgilenir.

Bu olabilir basitçe:
FirebaseIdToken::Signature.verify(token)

İlgili konular