2016-04-14 7 views
3

Ich versuche also einige Daten von Firebase zu erhalten, die natürlich einige Regeln/Sicherheitseinschränkungen definiert haben. Ich kann meinen Benutzer über die Registerkarte Login & Auth authentifizieren, und ich möchte Daten von Firebase abrufen, jedoch ist mein Benutzer immer noch nicht authentifiziert.Python Firebase Authentifizierung

user = ref.authenticate(email, password), die folgende für user

{ 
    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' 
    } 
} 

Nun gibt, dass ich weiß, dass der Benutzer authentifiziert ist (sonst gibt es etwas entlang der Linien eines Fehlers, würde Ich mag eine einfache GET tun conversations = firebase.get(FIREBASE_NAME + '/conversations/' + me), wo 'me' ist die user['user']['uid']

ich habe die folgende Struktur für conversations:

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

Ich würde denken, mein Benutzer authentifiziert ist, noch gibt es eine PermissionDenied

EDIT Gelöst dies durch eine andere Bibliothek verwenden, können Sie here finden. Die erste Bibliothek, die ich verwendet habe, hat die Authentifizierung nicht unterstützt, während die andere dies tut. Die Art und Weise gelöst wurde, war durch einige Funktionen von der anderen Implementierung und mein Token wie folgt zu senden: FIREBASE.child('/messages/').get(token=token)

+0

sein, die ich zuerst versuchen würde Einstellung '„.mehr“: auth = null' auf der obersten Ebene Ihrer Sicherheitsregeln!. Wenn das Lesen dann erfolgreich ist, wissen Sie, dass das Problem von Ihren Regeln verursacht wird. Wenn der Lesevorgang immer noch fehlschlägt, wird Ihr Benutzer offensichtlich * nicht * authentifiziert. Beachten Sie, dass es in diesem Fall hilfreich wäre, zu wissen, welche Bibliothek Sie für den Zugriff auf Firebase verwenden. –

+0

Es schien tatsächlich ein Problem mit der Bibliothek zu sein. Ich ging und implementierte einige Funktionen von einer anderen Bibliotheken, die die authentifizierten Anfragen unterstützt – dnsko

+0

Gut zu hören.Irgendwie kannst du das in eine Antwort darüber schreiben, welche Bibliothek du benutzt hast (sowohl die erste, die nicht funktioniert hat, als auch die neue, die das getan hat)? So können andere von Ihrer Erfahrung in der Zukunft profitieren. –

Antwort

1

diese gelöst durch eine andere Bibliothek verwenden, können Sie here finden. Die erste Bibliothek, die ich verwendet habe, hat die Authentifizierung nicht unterstützt, während die andere dies tut. Die Art und Weise gelöst wurde, war durch einige Funktionen von der anderen Implementierung und authentifizieren wie folgt:

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() 

Dann einen autorisierten Anruf zu tätigen, tun dies

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

Stellen Sie sicher, Ihr Token korrekt ist. Die Bibliothek dies unterstützt, aber sonst würde ich vorschlagen, dass Sie Firebase token generator for Python

+0

Wow! Einfaches Passwort in der URL ?! – JSBach

0

verwenden Sie sollten nicht in der URL-Passwörter senden, können Sie auf diese Weise tun:

__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'] 

Wenn dies gelingt, wird es wie führen:

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

Wenn (falsche etc Passwort) fehlschlägt:

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

oder

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