2016-04-03 15 views
5

Ich versuche, Daten auf Firebase von Python (2.7) zu erwerben.Firebase-Benutzerauthentifizierung in Python

Hier sind meine Regeln (auf firebseio.com):

{ 
    "rules": { 
     "user": { 
      "$uid": { 
      ".read": "auth != null && auth.uid == $uid", 
      ".write": "auth != null && auth.uid == $uid" 
      } 
     } 
    } 
} 

Hier ist ein Screenshot von meinem databse:

enter image description here

Und schließlich mein Python-Code:

from firebase import firebase 
from firebase.firebase import FirebaseApplication, FirebaseAuthentication 

DSN = 'https://<my name>.localhost' 
EMAIL = '[email protected]' 
authentication = FirebaseAuthentication(EMAIL, True, True, extra={'id': '<the user id>'}) 
firebase = FirebaseApplication(DSN, authentication) 
firebase.authentication = authentication 
print authentication.extra 

user = authentication.get_user() 
print user.firebase_auth_token 

Jetzt kann ich nicht herausfinden, wie man Daten erhält und Daten von und zu Firebase sendet. Ich habe versucht die Linie useing: result = firebase.get('/users', None, {'print': 'pretty'}), aber es gibt mir diese Fehlermeldung:

ConnectionError: HTTPSConnectionPool(host='<my name>.localhost', port=443): Max retries exceeded with url: /users/.json?print=pretty&auth=<the token code of the user> (Caused by NewConnectionError('<requests.packages.urllib3.connection.VerifiedHTTPSConnection object at 0x02A913B0>: Failed to establish a new connection: [Errno 11001] getaddrinfo failed',)) 

Kann mir jemand mit einem funktionierenden Code zur Verfügung stellen?

Vielen Dank im Voraus,

Zvi Karp

+0

Was passiert, wenn ich keinen DSN verwende? – marciokoko

Antwort

6

Hier sind die Schritte, die wir Authentifizierung Arbeits nahm zu bekommen.

(1) Zuerst benötigen Sie ein Firebase Secret. Nachdem Sie ein Projekt in Firebase haben, klicken Sie auf Einstellungen. Klicken Sie dann auf Datenbank und wählen Sie, um ein Geheimnis zu erstellen. settings

Kopieren Sie Ihr Geheimnis. Es wird später in deinen Code eingehen.

secret

(2) Sie benötigen eine Feuerbasis URL. Es wird das folgende Format haben: https: //.firebaseio.com Kopieren Sie das auch.

(3) Rufen Sie eine Firebase-REST-API für Python ab. Wir haben dieses ein: https://github.com/benletchford/python-firebase-gae Navigieren Sie über Ihre lib und diesen Befehl ausführen, die die Feuerbasis Code in Ihre lib Verzeichnis abgelegt werden:

git clone http://github.com/benletchford/python-firebase-gae lib/firebase 

(4) In Ihrem „main.py“ Datei (oder was auch immer Sie verwenden) diesen Code hinzu:

from google.appengine.ext import vendor 
vendor.add('lib') 

from firebase.wrapper import Firebase 

FIREBASE_SECRET = 'YOUR SECRET FROM PREVIOUS STEPS' 
FIREBASE_URL = 'https://[…].firebaseio.com/' 

(5) Fügen Sie diesen Code auf die MainHandler (vorausgesetzt, Sie verwenden App Engine):

class MainHandler(webapp2.RequestHandler): 
    def get(self): 
     fb = Firebase(FIREBASE_URL + 'users.json', FIREBASE_SECRET) 

     new_user_key = fb.post({ 
      "job_title": "web developer", 
      "name": "john smith", 
     }) 
     self.response.write(new_user_key) 
     self.response.write('<br />') 

     new_user_key = fb.post({ 
      "job_title": "wizard", 
      "name": "harry potter", 
     }) 
     self.response.write(new_user_key) 
     self.response.write('<br />') 

     fb = Firebase(FIREBASE_URL + 'users/%s.json' % (new_user_key['name'],), FIREBASE_SECRET) 
     fb.patch({ 
      "job_title": "super wizard", 
      "foo": "bar", 
     }) 

     fb = Firebase(FIREBASE_URL + 'users.json', FIREBASE_SECRET) 
     self.response.write(fb.get()) 
     self.response.write('<br />') 

Wenn Sie jetzt zu Ihrer Firebase-Echtzeitdatenbank navigieren, sollten Sie Einträge für Harry Potter als Benutzer und andere sehen.