如何使用Rails Firebase Auth?

Moh*_*ANE 8 android ruby-on-rails firebase firebase-authentication

我已经在我的Android应用程序中完全集成了Firebase Auth,现在我希望客户端使用独特的令牌与我的后端(rails)进行交互.我的问题是它是如何完成的:

  1. 用户已登录,例如使用Facebook Auth,
  2. 将Firebase令牌发送到后端并进行验证
  3. 为即将到来的Api请求使用唯一令牌响应客户端(获取用户数据,保存用户数据......)

谢谢

fsc*_*ndt 9

我开发了firebase_id_token gem。
它处理所有证书/签名业务。

它可以简单地用作:

FirebaseIdToken::Signature.verify(token)
Run Code Online (Sandbox Code Playgroud)


Rav*_*nha 6

以 JinLiu 的答案为例,一旦您在 Android 代码中获取了 Token,请将其发送到后端:https://www.yourbackend.com?authenticate?token=asdad7687h ... 请注意,Firebase 生成的令牌是 JWT token ,我们需要先验证其真实性并在后端进行解码。为此,您需要将这两个 gem 添加到您的 gemfile gem 'jwt' , '1.5.6' gem 'rest-client' , '2.0.1' 完成后,您需要将这两个(私有)函数添加到你的控制器:

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/securetoken@system.gserviceaccount.com"
  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
Run Code Online (Sandbox Code Playgroud)

现在您可以像之前的操作一样调用 get_set_user 来查看用户是否具有有效的令牌。这个想法很简单。检查令牌是否由https://www.googleapis.com/robot/v1/metadata/x509/securetoken@system.gserviceaccount.com中提到的密钥之一签名。如果是,则解码令牌并获取 firebase id 。


Jin*_*Liu 2

您不需要步骤#3。Firebase Auth Android SDK getToken() API 为登录用户返回一个短暂(一小时)的 Firebase Auth ID 令牌,如果前一个令牌过期,则会自动返回一个新令牌。

Firebase令牌验证文档描述了如何在客户端应用程序上获取 Firebase 令牌并在服务器端验证该令牌。