2017-10-31 3 views
0

Ich habe stundenlang gesucht und konnte keine einzige relevante Sache zu diesem Thema finden.Firebase on Express - Antwort kann nicht an Client mit .catch (Fehler) zurückgegeben werden

Ich verwende Firebase auf meinem Express-Web-Server für Benutzer (Admin) Authentifizierung. Ich habe im Grunde eine separate Systemsteuerung für die Admins getrennt von der mobilen App, so dass wir die Daten von den Nutzern kontrollieren können.

Im Moment habe ich diese Post-Adresse, die den folgenden:

app.post('/createNewAdminAccount', function(req, res){ 
    const password = bcryptPassword(bcryptDetails, req.body.password); 
    const username = req.body.username; 
    const auth = firebase.auth(); 
    let userExists = false; 

    function userExistsResponse(){ 
    res.setHeader('Content-Type', 'application/json'); 
    res.send(JSON.stringify({ "userExists": true })); 
    } 

    const promise = auth.createUserWithEmailAndPassword(username, String(password)); 
    promise.catch(function(error){ 
    console.log(error.message); 
    userExistsResponse(); 
    }); 
}); 

So wie ich userExistsResponse(); habe, ist nicht genau, wie ich es habe, aber aus Gründen der Klarheit, dann ist es so.

Es scheint, dass die .catch() Funktion nur console.log() akzeptieren kann. Ich sah sogar this, die eine .then(), error(error) Stapeln vorschlagen, aber das funktioniert nicht, egal wie ich es schreibe, und die Verwendung catch(error) scheint auch nicht zu arbeiten.

Ziel ist es zu sehen, dass der Benutzer authentifiziert ist und dem Client mit einer Nachricht als solche antwortet. Ich habe versucht, eine Variable auf true (wie Sie von der übrig gebliebenen let userExists = false Variable sehen können), eine Funktion, eine Anweisung ohne eine .catch() (verursacht den Server, um mit einem Fehler zu brechen), etc. zu brechen, usw. Keine funktioniert, Nach dem Durchsehen von YouTube-Videos, der Firebase-Dokumentation und von StackOverflow habe ich keine nützliche Antwort gefunden.

FIXEDCredit: 0x17

app.post('/createNewAdminAccount', authenticated, function(req, res){ 
    const password = String(bcryptPassword(bcryptDetails, req.body.password)); 
    const username = req.body.username; 

    admin.auth().getUserByEmail(username) 
    .then(function(userRecord) { 
     res.setHeader('Content-Type', 'application/json'); 
     res.send(JSON.stringify({ 'userExists': true })); 
     console.log('User Exists'); 
    }) 
    .catch(function(error) { 
     const promise = auth.createUserWithEmailAndPassword(username, password); 
     promise.catch(function(error){ 
     console.log(error.message); 
     }); 
     console.log('User Created'); 
    }); 
}); 

Antwort

0

Von der Art, wie ich es sehe, für die createNewAdminAccount Route, warum Sie nicht einen Scheck für den Benutzer in erster Linie zu tun mit admin.auth().getUserByEmail(); Analysieren Sie den Antwortcode auth/email-already-exists oder eine Kombination von einigen, die in dieser link aufgeführt sind, und fahren Sie dann mit admin.auth().createUser() fort?

Auch wenn Ihr Ziel ist nur authentifizieren Sie den Benutzer, sollten Sie nicht die unten genannte Methode verwenden und analysieren den Fehlercode für die gleiche?

firebase.auth().signInWithEmailAndPassword(email, password).catch(function(error) { 
    // Handle Errors here. 
    var errorCode = error.code; 
    var errorMessage = error.message; 
    // ... 
}); 
+0

Das funktionierte perfekt, danke. Ich habe die '.res' -Funktionen in' .then() 'gesetzt und die' auth.create ... 'in den Fehler' .catch() 'gesetzt –

Verwandte Themen