Biorąc odpowiedź JinLiu do przodu, gdy pojawi się token w kodzie android, wysłać go do backend powiedzieć: https://www.yourbackend.com?authenticate?token=asdad7687h ... Zauważ, że znak generowany przez Firebase jest wyrazem JWT, musimy najpierw sprawdzić jego autentyczność i dekodować go w backend. W tym celu musisz dodać te dwa klejnoty do gemfile gem 'jwt', '1.5.6' gem 'rest-client', '2.0.1' Po wykonaniu tego musisz dodać te dwa (private) w twoim kontrolerze:
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
Możesz teraz wywołać funkcję get_set_user jak poprzednio, aby zobaczyć, czy użytkownik ma ważny token. Pomysł jest prosty. Sprawdź, czy token jest podpisany przez jeden z kluczy wymienionych pod numerem https://www.googleapis.com/robot/v1/metadata/x509/[email protected]. Jeśli tak, zdekodować token i uzyskać identyfikator bazy ogniowej.
Doc wymienione powyżej nie mają Rails –