node.js - 在 app.js 中导入 firebase 后,我进行了初始化,但在控制器中 firebase.auth.createUserWithEmailAndPassword 不是函数
问题描述
这是在我的 app.js 中,我在其中导入了 firebase 并对其进行了初始化
const firebase = require('firebase');
firebase.initializeApp({
apiKey: ************,
authDomain: ****************,
databaseURL: **********",
projectId: ********,
storageBucket: ***********,
messagingSenderId: **********,
appId: *********,
measurementId: *********
});
app.use( (req, res, next) => {
firebase.auth().onAuthStateChanged(function(user) {
if (user) {
req.session.isLoggedIn = true;
} else {
req.session.isLoggedIn = false;
}
});
res.locals.isAuthed = req.session.isLoggedIn;
res.locals.csrfToken = req.csrfToken();
next();
});
但是在 auth.js 控制器中导入 firebase 后它不会工作
const firebase = require('firebase');
exports.postSignup = (req, res, next) => {
const name = req.body.name;
const email = req.body.email;
const password = req.body.password;
const confirmPassword = req.body.password;
if(password === confirmPassword){
firebase.auth().createUserWithEmailAndPassword(email, password)
.then(function(firebaseUser) {
const user = new User({
name: name,
email: email,
cart: {items: []}
});
return user.save();
})
.then(result => {
res.redirect('/login');
})
.catch(error => {
if (error.code == 'auth/email-already-in-use') {
//'auth/wrong-password'
req.flash('error', 'Already Registered');
return res.redirect('/signup');
}
});
}
发生此错误 TypeError: firebase.auth.createUserWithEmailAndPassword is not a function at exports.postSignup (/media/rishav/Project Space/Projects/Web Development/Node Express/Controllers/auth.js:95:23)
const firebase = require('firebase-admin');
// Fetch the service account key JSON file contents
const serviceAccount = require("../Data/firebase-service-account.json");
// Initialize the app with a service account, granting admin privileges
firebase.initializeApp({
credential: firebase.credential.cert(serviceAccount),
databaseURL: "****",
databaseAuthVariableOverride: null
});
解决方案
你可能是想说:
firebase.auth().createUserWithEmailAndPassword(...)
注意“auth”后面的括号。
但更大的问题是您不应该在 nodejs 应用程序中使用 Firebase Web 客户端库。相反,您应该使用Firebase Admin SDK,这是一个完全不同的模块,并以服务帐户初始化的管理员权限运行。您可以使用它在后端代码中创建用户帐户。
推荐阅读
- python-3.x - 使用递归生成器进行中序遍历时,yield 是如何工作的?
- session - 如何在与 redis 失去连接时切换到容器会话,就像使用 spring-shiro sessionManager 和 redis
- javascript - 未捕获的类型错误:无法读取属性“innerHTML”
- python - 计算大的十六进制数的模而不溢出
- sqlite - sqlite3中的外键问题
- sql - 如何使用sql select查询通过动态字段名称获取值
- command-prompt - 通过调度程序打开命令提示符
- java - 如何使用收集器进行分组
- html - CSS过渡宽度不适用于flex
- postgresql - 解析 int 到日期 (tmap) Talend postgresql