使用自定义令牌的Firebase身份validation

我有一个firebase项目,我试图从我的rails服务器进行身份validation,创建一个自定义令牌与库ruby-jwt,就像在文档上说的那样,但我一直得到同样的错误:

auth / invalid-custom-token,自定义标记格式不正确。 请查看文档。

credentials.json来自我在谷歌控制台中创建的服务帐户,uid从前端发送到api。

 def generate_auth_token(uid) now_seconds = Time.now.to_i credentials = JSON.parse(File.read("credentials.json")) private_key = OpenSSL::PKey::RSA.new credentials["private_key"] payload = { :iss => credentials["client_email"], :sub => credentials["client_email"], :aud => 'https://identitytoolkit.googleapis.com/google.identity.identitytoolkit.v1.IdentityToolkit', :iat => now_seconds, :exp => now_seconds+(60*60), # Maximum expiration time is one hour :uid => uid.to_s, :claims => {:premium_account => true} } JWT.encode(payload, private_key, 'RS256') end 

它在jwt.io中看起来像这样

 { "iss": "defered@defered.iam.gserviceaccount.com", "sub": "defered@defered.iam.gserviceaccount.com", "aud": "https://identitytoolkit.googleapis.com/google.identity.identitytoolkit.v1.IdentityToolkit", "iat": 1486824545, "exp": 1486828145, "uid": "4", "claims": { "premium_account": true } } 

我发现了一种更好的身份validation方法,我只是发送firebase为您提供的令牌,并使用我需要的信息在轨道上进行validation,就是这样。

请看看我的firebase_id_token gem。
它完全符合你的要求。