[英]How to Firebase Auth with Rails?
我已經在我的 Android 應用程序中完全集成了 Firebase 身份驗證,現在我希望客戶端使用唯一的令牌與我的后端(rails)進行交互。 我的問題是它是如何完成的:
謝謝
繼續 JinLiu 的回答,一旦你在你的 android 代碼中獲得了令牌,將它發送到你的后端說: 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
現在您可以像之前的操作一樣調用 get_set_user 來查看用戶是否具有有效令牌。 這個想法很簡單。 檢查令牌是否由https://www.googleapis.com/robot/v1/metadata/x509/securetoken@system.gserviceaccount.com 中提到的密鑰之一簽名。 如果是,解碼令牌並獲取 firebase id。
您不需要第 3 步。 Firebase Auth Android SDK getToken() API 為登錄用戶返回一個短期(一小時)Firebase Auth ID 令牌,如果前一個令牌過期,則會自動返回一個新令牌。
Firebase 令牌驗證文檔描述了如何在客戶端應用程序上獲取 Firebase 令牌並在服務器端驗證令牌。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.