我们如何在node.js中使用Firebase Auth创建用户?

时间:2016-05-27 14:27:19

标签: node.js firebase firebase-authentication

我尝试在nodejs中使用Firebase身份验证创建用户帐户。它没有用,我也不知道为什么。这是nodejs生成的代码和错误:

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

var app = firebase.initializeApp(config);

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

auth.createUserWithUsernameAndPassword("anemail@gmail.com", "@NewPassWord").then(
    function(user){ console.log(user);},
    function(error){ console.error(error);}
);

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

5 个答案:

答案 0 :(得分:3)

截至2017年5月,这是我们成功使用的。

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

答案 1 :(得分:2)

好吧,我不认为方法"createUserWithUsernameAndPassword"有效,

使用此代替createUserWithEmailAndPassword

你在firebase使用电子邮件时使用了用户名

答案 2 :(得分:2)

我终于让它在Node.js中运行了。您的appfirebase-admin的实例,而不是firebase吗?

在我的express应用中,我在主firebase中初始化app.js,就像这样(非常标准的票价):

var firebase = require("firebase");

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

然后在负责创建用户的route中执行此操作:

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

答案 3 :(得分:1)

注意:这不是答案,而是通过上面的@Gregg延长this回答。

我也在努力使用Firebase + node + express的服务帐户创建用户。

对于其他感兴趣的人:

在根app.js我有:

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

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

并且在auth.js路线中我(根据@Gregg):

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

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

我知道这只是对早期答案的轻微延伸,但文档似乎非常不清楚,我注意到有很多人有相同或类似的问题。

答案 4 :(得分:0)

赛勒斯的回答是正确的。

但请注意,截至2016年11月,执行此操作的方法如下:

firebaseAdmin.auth().createUser({
    email: "user@example.com",
    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);
  });

请参阅official documentation中的更完整指南。