2016-09-16 5 views
5

मेरे पास एक सर्वर ऐप है और मैं उस सर्वर पर वर्तमान में साइन-इन किए गए उपयोगकर्ता की पहचान करने की कोशिश कर रहा हूं।फ़ायरबेस सत्यापन आईडी टोकन

var provider = new firebase.auth.GoogleAuthProvider();   
    firebase.auth().signInWithPopup(provider).then(function(result) { 
     userJsonToken = result.credential.accessToken; 
     user = result.user; 
    }).catch(function(error) { 
     // Handle Errors here. 
     var errorCode = error.code; 
     var errorMessage = error.message; 
     // The email of the user's account used. 
     var email = error.email; 
     // The firebase.auth.AuthCredential type that was used. 
     var credential = error.credential; 
    }); 

मैं तो एक ajax कॉल के माध्यम से अपने सर्वर को userJsonToken भेजने के लिए और मैं टोकन देख सकते हैं जब मैं बहुत टोकन सही ढंग से करने के लिए भेजा जा रहा है डिबग: मैं सफलतापूर्वक इस तरह अपने वेब एप्लिकेशन पर उपयोगकर्ता को प्रमाणीकृत किया है सर्वर।

अपने सर्वर आवेदन में मैं यह कर रहा हूं:

try (InputStream is = FirebaseUtil.class.getClassLoader().getResourceAsStream(FIREBASE_CREDENTIALS_JSON_FILE)) { 
    FirebaseOptions options = new FirebaseOptions.Builder().setServiceAccount(is).setDatabaseUrl(FIREBASE_DATABASE_URL).build();   
    FirebaseApp.initializeApp(options); 
} catch (IOException e) { 
    e.printStackTrace(System.err); 
} 

तो मैं कार्य करें:

FirebaseAuth.getInstance().verifyIdToken(idToken).addOnFailureListener(new OnFailureListener() {    
     @Override 
     public void onFailure(Exception ex) { 
      throw new AuthenticationServiceException(ex.getMessage(), ex); 
     } 
    }).addOnSuccessListener(new OnSuccessListener<FirebaseToken>() { 
     @Override 
     public void onSuccess(FirebaseToken token) { 
      System.out.println("Yeehaw"); 
     } 
    }).addOnCompleteListener(new OnCompleteListener<FirebaseToken>() {   
     @Override 
     public void onComplete(Task<FirebaseToken> arg0) { 
      System.out.println(arg0.isSuccessful()); 
     } 
    }); 

इस बिंदु पर, OnFailureListener कहा जाता हो रही है। मुझे java.lang.IllegalArgumentException मिल रहा है, इस बारे में कोई स्पष्टीकरण नहीं है कि क्यों या क्या हुआ है। क्या वैसे भी मैं फायरबेस पर लॉग देख सकता हूं जो कि क्या हुआ है पर कुछ प्रकाश डालेगा? धन्यवाद

यह पूरा त्रुटि है:

Caused by: java.lang.IllegalArgumentException 
at com.google.api.client.repackaged.com.google.common.base.Preconditions.checkArgument(Preconditions.java:111) 
at com.google.api.client.util.Preconditions.checkArgument(Preconditions.java:37) 
at com.google.api.client.json.webtoken.JsonWebSignature$Parser.parse(JsonWebSignature.java:602) 
at com.google.firebase.auth.FirebaseToken.parse(FirebaseToken.java:81) 
at com.google.firebase.auth.FirebaseAuth$1.call(FirebaseAuth.java:143) 
at com.google.firebase.auth.FirebaseAuth$1.call(FirebaseAuth.java:140) 
at com.google.firebase.tasks.Tasks$1.run(Tasks.java:63) 
+0

क्या आपको कभी इसका समाधान मिला? अब मैं एक ही त्रुटि को मार रहा हूं, और इस बारे में भ्रमित हूं कि इसे कैसे डिबग करना है, यह देखते हुए कि अपवाद बिल्कुल कोई जानकारी नहीं देता है – RvPr

उत्तर

0

अपने आप को इस समस्या में पड़ गए, और यहाँ का उत्तर नहीं पाने के बाद, स्रोत-कोड में ही देखने का फैसला किया।

/** 
* Parses a JWS token into a parsed {@link JsonWebSignature}. 
* 
* @param tokenString JWS token string 
* @return parsed {@link JsonWebSignature} 
*/ 
public JsonWebSignature parse(String tokenString) throws IOException { 
    // split on the dots 
    int firstDot = tokenString.indexOf('.'); 
    Preconditions.checkArgument(firstDot != -1); 
    byte[] headerBytes = Base64.decodeBase64(tokenString.substring(0, firstDot)); 
    int secondDot = tokenString.indexOf('.', firstDot + 1); 
    Preconditions.checkArgument(secondDot != -1); 
    ... 

विशेष रूप से, इस लाइन है कि आपके मामले में त्रुटि शुरू हो रहा था:

Preconditions.checkArgument(secondDot != -1); 

जाहिर है, अगर आपके टोकन कम से कम 2 डॉट्स नहीं है, यह एक IllegalArgumentException यहाँ का उत्पादन करेगा, बिना कोई त्रुटि संदेश यह स्पष्ट करता है कि यह त्रुटि क्यों फेंक दी गई थी।

मेरे मामले में मैंने इस त्रुटि को मारा क्योंकि मैं परीक्षण उद्देश्यों के लिए हाथ से बना एक नकली टोकन का उपयोग कर रहा था। मैं एक "टोकन डिकोड विफल" प्रकार त्रुटि देखने की उम्मीद कर रहा था। यकीन है कि पर्याप्त, मेरे लिए 2 डॉट्स नकली-टोकन जोड़ने के बाद, मैं तो एक अधिक वर्णनात्मक त्रुटि संदेश में चलाने:

Decoding Firebase ID token failed. Make sure you passed the entire string JWT which represents an ID token. See https://firebase.google.com/docs/auth/admin/verify-id-tokens for details on how to retrieve an ID token.

यह दुर्भाग्यपूर्ण है कि Firebase टीम के लिए एक और वर्णनात्मक त्रुटि संदेश को शामिल नहीं किया पहली 2 पूर्व शर्त, क्योंकि इससे उपयोगकर्ताओं को इस तथ्य से बेहतर तरीके से सतर्क किया जाएगा कि टोकन विकृत/अपूर्ण है, और फ़ायरबेस एथ को शुरू करने या बुलाए जाने के तरीके में कुछ भी गलत नहीं है।

संबंधित मुद्दे