我尝试在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
答案 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中运行了。您的app
是firebase-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中的更完整指南。