2016-04-14 59 views
3

Bu yüzden Firebase'den bazı kuralların/güvenlik kısıtlamalarının tanımlanmış olduğu bazı verileri elde etmeye çalışıyorum. Kullanıcımı Giriş & Auth sekmesinden doğrulayabilirim ve firebase'ten veri almak istiyorum, ancak yine de kullanıcı kimliğim doğrulanmıyor. Ben kullanıcı kimlik doğrulamasının biliyorum Şimdi userPython Firebase kimlik doğrulaması

{ 
    u'token':{some long token here}', 
    u'user':{ 
     u'uid':u'ef44b781-8842-4f28-abf0-2ac9aa0b2bea', 
     u'provider':u'password', 
     u'email':u'[email protected]', 
     u'isTemporaryPassword':False, 
     u'sessionKey':u'{session key here}}', 
     u'md5_hash':u'{md5_hash here}}', 
     u'id':u'ef44b781-8842-4f28-abf0-2ac9aa0b2bea' 
    } 
} 

için aşağıdaki döndürür

user = ref.authenticate(email, password), (aksi takdirde bir hata çizgisinde bir şey döndüren, basit bir GET conversations = firebase.get(FIREBASE_NAME + '/conversations/' + me), yapmak istiyorum 'ben' user['user']['uid']

olduğunu ben conversations için aşağıdaki yapısı:

conversations/my-uid/other-uid/{data}

benim kullanıcı kimliği doğrulanır düşünürdüm, hala sen here bulabilirsiniz farklı bir kütüphaneyi kullanarak bu çözüldü bir PermissionDenied

DÜZENLEMEYİ döndürür. Kullandığım ilk kitaplık, kimlik doğrulama işlemini desteklemiyordu. FIREBASE.child('/messages/').get(token=token)

+0

çekebilir: auth = Güvenlik kurallarının en üst düzeyinde null'!. Okuma daha sonra başarılı olursa, sorunun kurallarınızdan kaynaklandığını bilirsiniz. Okuma hala başarısız olursa, kullanıcının görünüşe göre * tamamıyla * doğrulanmamıştır. Bu nedenle, Firebase'e erişmek için hangi kütüphaneyi kullandığınızı bilmenize yardımcı olacağını unutmayın. –

+0

Kitaplık ile gerçekten bir sorun gibi görünüyordu. Farklı bir kitaplıktan bazı özellikleri uygulayıp uyguladım, bu da doğrulanmış istekleri destekledi – dnsko

+0

Duymak güzeldi.Hangi kütüphaneyi kullandığınıza dair bir cevap yazabilmenin herhangi bir yolu (hem işe yaramayan ilk hem de yeni olanı)? Bu sayede diğerleri, gelecekte yaşayacağınız deneyimlerden faydalanabilir. –

cevap

1

sen here bulabilirsiniz farklı bir kütüphaneyi kullanarak bu çözüldü: o çözüldü yolu, diğeri bazı fonksiyonların uygulanması ve aşağıdaki gibi benim belirteci göndererek oldu. Kullandığım ilk kitaplık, kimlik doğrulama işlemini desteklemiyordu. o çözüldü yolu, diğeri bazı fonksiyonlarını uygulayarak ve aşağıdaki gibi kimlik doğrulaması:

def auth_with_password(self, email, password): 
    request_ref = 'https://auth.firebase.com/auth/firebase?firebase={0}&email={1}&password={2}'.\ 
     format(self.fire_base_name, email, password) 
    request_object = self.requests.get(request_ref) 
    return request_object.json() 

O zaman bu

user = auth_with_password(email, password) 
token = user['user']['token'] 
FIREBASE.child('/messages/').get(token=token) 

Göstergeniz doğru olduğundan emin olun yapmak, yetkili arama yapmak için. Kütüphane bu destekler, ama başka türlü sen Firebase token generator for Python

+0

Wow! URL'deki düz şifre ?! – JSBach

0

URL'ye şifreleri göndermek olmamalı kullanmanızı tavsiye ediyoruz, eğer bu şekilde yapabilirsiniz:

__FIREBASE_USER_VERIFY_SERVICE = "https://www.googleapis.com/identitytoolkit/v3/relyingparty/verifyPassword" 
__FIREBASE_API_KEY = __your_api_key_here__ 

def user_login(email, passwd): 
    url = "%s?key=%s" % (__FIREBASE_USER_VERIFY_SERVICE, __FIREBASE_API_KEY) 
    data = {"email": email, 
      "password": passwd, 
      "returnSecureToken": True} 
    result = requests.post(url, json=data) 
    is_login_successful = result.ok 
    json_result = result.json() 
    return json_result # authToken=> json_result['idToken'] 

başarılı olursa, bu gibi sonuçlanacaktır:

{ 
    "displayName": "", 
    "email": "[email protected]", 
    "expiresIn": "3600", 
    "idToken": "abc123...", 
    "kind": "identitytoolkit#VerifyPasswordResponse", 
    "localId": "UWQ...x2", 
    "refreshToken": "def098...", 
    "registered": true 
} 

başarısız olursa (yanlış şifre vb):

{ 
    "error": { 
    "code": 400, 
    "errors": [ 
     { 
     "domain": "global", 
     "message": "INVALID_PASSWORD", 
     "reason": "invalid" 
     } 
    ], 
    "message": "INVALID_PASSWORD" 
    } 
} 

ya ben ilk ` ".read" ayarını çalışacaktı

{ 
    "error": { 
    "code": 400, 
    "errors": [ 
     { 
     "domain": "global", 
     "message": "MISSING_PASSWORD", 
     "reason": "invalid" 
     } 
    ], 
    "message": "MISSING_PASSWORD" 
    } 
}