6

के साथ फायरबेस अनुमति अस्वीकार (पढ़ें और लिखें) मैं प्रमाणीकरण के साथ अपने डेटाबेस में पढ़ना और लिखना चाहता हूं लेकिन मुझे दोनों के लिए Permission denied मिला। मैं यह पता लगाने की कोशिश कर रहा हूं कि यह क्यों काम नहीं कर रहा है।प्रमाणीकरण

मैंने डिफ़ॉल्ट नियमों का उपयोग किया क्योंकि मैं प्रमाणीकरण चाहता हूं, जैसा दस्तावेज़ में बताया गया है।

डिफ़ॉल्ट नियमों को प्रमाणीकरण की आवश्यकता होती है। वे आपके ऐप के प्रमाणीकृत उपयोगकर्ताओं तक पूर्ण पढ़ने और लिखने की अनुमति देते हैं। यदि आप अपने ऐप के सभी उपयोगकर्ताओं को डेटा खोलना चाहते हैं तो वे उपयोगी हैं लेकिन यह दुनिया के लिए खुला नहीं चाहते हैं।

  • Firebase नियम:

    { 
        "rules": { 
        ".read": "auth != null", 
        ".write": "auth != null" 
        } 
    } 
    
  • उपयोगकर्ता बनाएँ:

    auth.createUserWithEmailAndPassword(email, password) 
         .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() { 
          @Override 
          public void onComplete(@NonNull Task<AuthResult> task) { 
           Log.d("USER_CREATE", "createUserWithEmail:onComplete:" + task.isSuccessful()); 
    
           // If sign in fails, display a message to the user. If sign in succeeds 
           // the auth state listener will be notified and logic to handle the 
           // signed in user can be handled in the listener. 
           if (!task.isSuccessful()) { 
            Toast.makeText(getApplicationContext(), "Authentication failed.", 
              Toast.LENGTH_SHORT).show(); 
           } else { 
            startActivity(new Intent(SignupActivity.this, MainActivity.class)); 
            finish(); 
           } 
    
           // ... 
          } 
         }); 
    
  • साइन उपयोगकर्ता में:

    auth.signInWithEmailAndPassword(email, password) 
         .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() { 
          @Override 
          public void onComplete(@NonNull Task<AuthResult> task) { 
           Log.d("COMPLETE", "signInWithEmail:onComplete:" + task.isSuccessful()); 
          } 
         }); 
    

मैं एक AuthListener मिला है और यह मुझे लॉग कि उपयोगकर्ता के प्रवेश किए

  • AuthListener:।

    mAuthListener = new FirebaseAuth.AuthStateListener() { 
         @Override 
         public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) { 
          FirebaseUser user = firebaseAuth.getCurrentUser(); 
          if (user != null) { 
           // User is signed in 
           Log.d("TAG", "onAuthStateChanged:signed_in:" + user.getUid()); 
          } else { 
           // User is signed out 
           Log.d("TAG", "onAuthStateChanged:signed_out"); 
          } 
          // ... 
         } 
        }; 
        // ... 
    
  • पढ़ें टेस्ट: (साथ डेटाबेस में मैन्युअल रूप से जोड़ा गया एक नोड)

    firebase.child("test").addValueEventListener(new ValueEventListener() { 
    
        @Override 
        public void onDataChange(DataSnapshot snapshot) { 
         Log.d("result", snapshot.getValue()+""); 
        } 
    
        @Override 
        public void onCancelled(FirebaseError error) { 
         Log.d("The read failed: ", error.getMessage()); 
        } 
    }); 
    
  • लिखें परीक्षण: devs और employers: मैं उन की दो श्रेणियों के साथ एक मुख्य नोड users चाहते हैं।

    Firebase usersRef = firebase.child("users").child("devs"); 
        FirebaseUser user = auth.getCurrentUser(); 
    
    Map<String, String> userMap = new HashMap<String, String>(); 
    userMap.put("name", "blabla"); 
    userMap.put("city", "Brussels"); 
    
    Map<String, Map<String, String>> users = new HashMap<String, Map<String, String>>(); 
    users.put(user.getUid().toString(), userMap); 
    usersRef.setValue(users); 
    
  • लॉग्स:

    D/AUTH LISTENER: onAuthStateChanged:signed_in:wnomkwiOWOb4wNNLSsrWeT5xxUq1 
    D/USER_CREATE: createUserWithEmail:onComplete:true 
    I/AppCompatViewInflater: app:theme is now deprecated. Please move to using android:theme instead. 
    D/ACTION BAR?: [email protected] 
    W/SyncTree: Listen at /test failed: FirebaseError: Permission denied 
    D/The read failed:: Permission denied 
    D/FirebaseAuth: Notifying listeners about user (wnomkwiOWOb4wNNLSsrWeT5xxUq1). 
    D/FirebaseAuth: Notifying listeners about user (wnomkwiOWOb4wNNLSsrWeT5xxUq1). 
    D/FirebaseApp: Notifying auth state listeners. 
    D/FirebaseApp: Notified 0 auth state listeners. 
    D/AUTH LISTENER: onAuthStateChanged:signed_in:wnomkwiOWOb4wNNLSsrWeT5xxUq1 
    D/FirebaseApp: Notifying auth state listeners. 
    D/FirebaseApp: Notified 0 auth state listeners. 
    D/AUTH LISTENER: onAuthStateChanged:signed_in:wnomkwiOWOb4wNNLSsrWeT5xxUq1 
    D/COMPLETE: signInWithEmail:onComplete:true 
    

मैं सार्वजनिक अनुमति के साथ उन 2 परीक्षण किए गए (लिखने: सच है, पढ़ें: सच) है और यह काम कर रहा था, तो कुछ के साथ गलत किया जाना चाहिए मेरा प्रमाणीकरण मैं शायद गलतफहमी/कुछ याद कर रहा हूं लेकिन वास्तव में वास्तव में क्या नहीं देखता हूं। बहुत अच्छा होगा अगर कोई मुझे प्रबुद्ध करना चाहेगा!

+0

क्या आप पंजीकृत उपयोगकर्ता और फायरबेस कंसोल में अनुमति टैब के लिए स्क्रीनशॉट साझा कर सकते हैं? –

+0

क्या आपने [सिम्युलेटर] (http://stackoverflow.com/a/37911209/4695325) में अपने नियमों का परीक्षण किया है? अगर आपको और मदद की ज़रूरत है तो आप यहां परिणाम पोस्ट कर सकते हैं। इसके अलावा, आपके लॉग से लगता है कि आप 'createUserWithEmailAndPassword' और' signInWithEmailAndPassword' हर बार अपने अनुप्रयोग शुरू होता है बुला रहे हैं। आप 'का उपयोग करना चाहिए ही उपयोगकर्ता पहले से प्रवेश होने onAuthStateChanged' पता लगाने के लिए। आप' createUserWithEmailAndPassword' का उपयोग करना चाहिए कि वह एक "खाता" बनाने के लिए की जरूरत है या 'signInWithEmailAndPassword' अगर अगर वह पहले से पंजीकृत है और वह –

+0

@DevidFarinelli मैं में लॉग इन करना चाहता बस सिम्युलेटर के साथ नियमों का परीक्षण किया, एक 'कस्टम' प्रमाणीकरण का उपयोग (के बाद से मेरे एप्लिकेशन में मैं ईमेल/पासवर्ड प्रमाणीकरण का उपयोग कर रहा हूँ) है और यह दोनों के लिए ठीक काम करता है, इसलिए मुझे लगता है समस्या मेरी प्रमाणीकरण प्रक्रिया में खड़ा है। कोड साइनअपएक्टिविटी से आता है, इसलिए मैं हर बार उपयोगकर्ताओं को बना रहा हूं और हस्ताक्षर कर रहा हूं। – raphh

उत्तर

2

आप नए फायरबेस एसडीके के साथ पुराने फायरबेस एसडीके मिश्रण कर रहे हैं। अपने build.gradle से फ़ायरबेस-एंड्रॉइड-एसडीके 2.5.2 निकालें और Firebase कक्षा के बजाय नए DatabaseReference कक्षा का उपयोग करने के लिए अपने आयात अपडेट करें।

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