2016-08-10 2 views
5

필자는 안드로이드 앱에 Firebase Auth를 완벽하게 통합 시켰습니다. 이제는 클라이언트가 고유 한 토큰을 사용하여 백엔드 (레일)와 상호 작용하기를 바랍니다. 내 질문은 어떻게하는지 이것이다 :,Firebase Auth with Rails?

  1. 사용자가 로그인 한, 예를 페이스 북 인증에 사용
  2. 백엔드 고유 토큰과 함께 클라이언트로는
  3. 에 응답을 확인하기 위해 중포 기지 토큰을 보내기
  4. 곧 API 요청은

당신은 3 단계가 필요하지 않습니다 당신에게

답변

1

감사 (... 사용자 데이터를 저장, 사용자 데이터를 얻을). Firebase Auth Android SDK getToken() API는 로그인 사용자에 대한 수명이 짧은 (1 시간) Firebase Auth ID 토큰을 반환하고 이전 토큰이 만료되면 새 토큰을 자동으로 반환합니다.

Firebase token verification doc은 클라이언트 응용 프로그램에서 Firebase 토큰을 얻고 서버 측에서 토큰을 확인하는 방법을 설명합니다. 당신이 당신의 안드로이드 코드에서 토큰을 얻을 백엔드로 전송하면, 앞으로 JinLiu의 답변을 복용

+0

위에서 언급 한 문서가 없습니다 레일 구현 –

0

말 : https://www.yourbackend.com?authenticate?token=asdad7687h이 ... 중포 기지에 의해 생성 된 토큰이 JWT 토큰입니다 하는 것으로, 우리가 먼저 진위를 확인해야합니다 그것을 백엔드에서 디코딩합니다. 이를 위해 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/[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 

지금 당신이 작업을 참조하십시오 전에로 get_set_user 호출 할 수 있습니다. 아이디어가 간단합니다. 토큰이 https://www.googleapis.com/robot/v1/metadata/x509/[email protected]에 언급 된 키 중 하나에 의해 서명되었는지 확인하십시오. 그렇다면 토큰을 디코딩하고 파이어베이스 ID를 가져옵니다.

0

나는 firebase_id_token 보석을 개발했습니다.
그것은 모든 인증서/서명 업무를 다룹니다.

이 될 수있다 단순히 :
FirebaseIdToken::Signature.verify(token)