2016-05-27 13 views
7

Próbuję utworzyć konto użytkownika za pomocą autoryzacji Firebase w nodejs. To nie działa i nie wiem dlaczego. Oto kod i błąd generowany przez nodejs:Jak utworzyć użytkownika z Firebase Auth w pliku node.js?

var config = {.......}; // i can't share the config 

var app = firebase.initializeApp(config); 

var db = app.database(); 
var auth = app.auth(); 

auth.createUserWithUsernameAndPassword("[email protected]", "@NewPassWord").then(
    function(user){ console.log(user);}, 
    function(error){ console.error(error);} 
); 

Błąd generowania przez NodeJS:

TypeError: Object [object Object] has no method 'createUserWithUsernameAndPassword' 
    at Object.<anonymous> (/home/antonio/Projects/firebase/app.js:20:6) 
    at Module._compile (module.js:456:26) 
    at Object.Module._extensions..js (module.js:474:10) 
    at Module.load (module.js:356:32) 
    at Function.Module._load (module.js:312:12) 
    at Function.Module.runMain (module.js:497:10) 
    at startup (node.js:119:16) 
    at node.js:906:3 
+0

Mam dokładnie ten sam problem! Proszę pomóc http://stackoverflow.com/questions/37504466/firebase-auth-createuserwithemailandpassword-undefined-is-not-a-function?lq=1 –

+0

Znalazłem obejście tego przy użyciu anonimowego uwierzytelnienia użytkownika od klienta bok. Uprzejmie opracuj swój przypadek użycia, tak, żebym mógł napisać odpowiedź na podstawie tego. –

Odpowiedz

2

dobrze, nie sądzę, że metoda "createUserWithUsernameAndPassword" działa

Użyj tego zamiast createUserWithEmailAndPassword

używana nazwa użytkownika, gdy baza ogniowa używa adresu e-mail

0

Odpowiedź Cyrusa jest poprawna.

Należy jednak pamiętać, że od listopada 2016 roku w drodze do tego celu jest następujący:

firebaseAdmin.auth().createUser({ 
    email: "[email protected]", 
    password: "secretPassword" 
    }) 
    .then(function(userRecord) { 
    // A UserRecord representation of the newly created user is returned 
    console.log("Successfully created new user:", userRecord.uid); 
    }) 
    .catch(function(error) { 
    console.log("Error creating new user:", error); 
    }); 

Zobacz więcej kompletny podręcznik w official documentation.

1

W końcu udało mi się pracować w Node.js. Czy Twój app jest instancją firebase-admin przez przypadek, w przeciwieństwie do firebase?

W moim express app zainicjować firebase w głównym app.js jak tak (dość standardowy taryfy):

var firebase = require("firebase"); 

firebase.initializeApp 
({ 
    apiKey: "xxx", 
    authDomain: "xxx", 
    databaseURL: "xxx", 
    storageBucket: "xxx", 
    messagingSenderId: "xxx" 
}); 

Następnie w route odpowiedzialny za tworzenie użytkowników to zrobić:

var firebase = require("firebase"); 

router.post('/register', function(req, res, next) 
{ 
    var email = req.body.email; 
    var password = req.body.password; 

    firebase.auth().createUserWithEmailAndPassword 
    (
    email, 
    password 
) 
    .then(function(userRecord) 
    { 
    res.location('/user/' + userRecord.uid); 
    res.status(201).end(); 
    }) 
    .catch(function(error) 
    { 
    res.write 
    ({ 
     code: error.code 
    }); 
    res.status(401).end(); 
    }); 
}); 
+0

Gdzie obsługujesz logowanie lub uwierzytelnianie użytkownika w trybie ekspresowym? –

3

As z maja 2017 r. to właśnie z powodzeniem używamy.

// Create the authenticated user 
    admin.auth().createUser({ 
    email: email, 
    password: password, 
    displayName: `${firstName} ${lastName}`, 
    }) 
0

UWAGA: To nie jest odpowiedź, ale rozszerza this odpowiedź przez @Gregg powyżej.

Ja także usiłowałem utworzyć użytkowników za pomocą konta usługi w Firebase + node + express.

Dla ktoś zainteresowany:

w korzeniu app.js mam:

var admin = require("firebase-admin"); 
var serviceAccount = require("./key.json"); 

admin.initializeApp({ 
    credential: admin.credential.cert(serviceAccount), 
    databaseURL: "https://<app-name>.firebaseio.com" 
}); 

aw trasie auth.js mam (zgodnie @Gregg):

const firebase = require('firebase-admin'); 

firebase.auth().defaultAuth.createUser({ 
    email: req.body.email, 
    password: req.body.password, 
    displayName: req.body.username, 
}) 

Wiem, że jest to tylko niewielkie rozszerzenie wcześniejszej odpowiedzi, jednak dokumenty wydają się bardzo niejasne i zauważyłem dużą liczbę osób, które mają ten sam lub podobny problem.