在 node.js 中为云函数导入 firebase
Importing firebase in node.js for cloud functions
我正在学习编写云函数的教程,我尝试导入 firebase 并使用教程中使用的 firebase.auth(),但出现以下错误。
⚠ Error [ERR_PACKAGE_PATH_NOT_EXPORTED]: No "exports" main defined in /home/sankethbk7777/Desktop/React/Projects/social-ape/my-code/social-ape/functions/node_modules/firebase/package.json
at throwExportsNotFound (internal/modules/esm/resolve.js:299:9)
at packageExportsResolve (internal/modules/esm/resolve.js:522:3)
at resolveExports (internal/modules/cjs/loader.js:449:36)
at Function.Module._findPath (internal/modules/cjs/loader.js:489:31)
at Function.Module._resolveFilename (internal/modules/cjs/loader.js:875:27)
at Function.Module._load (internal/modules/cjs/loader.js:745:27)
at Module.require (internal/modules/cjs/loader.js:961:19)
at require (internal/modules/cjs/helpers.js:92:18)
at Object.<anonymous> (/home/sankethbk7777/Desktop/React/Projects/social-ape/my-code/social-ape/functions/index.js:19:18)
at Module._compile (internal/modules/cjs/loader.js:1072:14)
⚠ We were unable to load your functions code. (see above)
代码
functions/index.js
const functions = require('firebase-functions');
const admin = require('firebase-admin');
const app = require('express')();
admin.initializeApp();
const config = {
apiKey: 'AIzaSyDMFe1IwnLoui-Meue-FMwNhc1k-MB8vc8',
authDomain: 'socialape-d306c.firebaseapp.com',
projectId: 'socialape-d306c',
storageBucket: 'socialape-d306c.appspot.com',
messagingSenderId: '705972174784',
appId: '1:705972174784:web:1ed87302a774bd1cef1225',
};
const firebase = require('firebase');
firebase.initializeApp(config);
// Signup route
app.post('/signup', (req, res) => {
const newUser = {
email: req.body.email,
password: req.body.password,
confirmPassword: req.body.confirmPassword,
handle: req.body.handle,
};
// TODO: validate date
firebase
.auth()
.createUserWithEmailAndPassword(newUser.email, newUser.password)
.then((data) => {
return res
.status(201)
.json({ message: `user ${data.user.uid} signed up successfully` });
})
.catch((err) => {
console.log(err);
return res.status(500).json({ error: err.code });
});
});
// To tell firebase cloud functions to use routes on express app
// we have written api because we want all our API URL's to start with /api.
exports.api = functions.https.onRequest(app);
我知道导入可能会因为版本更改而略有不同(教程来自 2019 年),但我无法修复它。请帮助我
您应该在云函数中使用 Admin SDK,而不是客户端。也就是说,您可以删除 const firebase = require("firebase")
和 firebase.initializeApp(config);
以及 客户端配置 。创建用户,可以使用createUser()
方法:
app.post('/signup', (req, res) => {
const newUser = {
email: req.body.email,
password: req.body.password,
confirmPassword: req.body.confirmPassword,
handle: req.body.handle,
};
return admin.auth().createUser({ email, password }).then((userRecord) => {
return res.send(`Created user ${userRecord.uid}`)
})
}
我不确定 'handle' 是什么,但您可以使用 Custom Claims 或任何数据库来存储它。
请注意,在云功能或服务器环境中创建用户不会自动让用户登录。返回响应后,您必须将用户重定向到您的登录页面。
我正在学习编写云函数的教程,我尝试导入 firebase 并使用教程中使用的 firebase.auth(),但出现以下错误。
⚠ Error [ERR_PACKAGE_PATH_NOT_EXPORTED]: No "exports" main defined in /home/sankethbk7777/Desktop/React/Projects/social-ape/my-code/social-ape/functions/node_modules/firebase/package.json
at throwExportsNotFound (internal/modules/esm/resolve.js:299:9)
at packageExportsResolve (internal/modules/esm/resolve.js:522:3)
at resolveExports (internal/modules/cjs/loader.js:449:36)
at Function.Module._findPath (internal/modules/cjs/loader.js:489:31)
at Function.Module._resolveFilename (internal/modules/cjs/loader.js:875:27)
at Function.Module._load (internal/modules/cjs/loader.js:745:27)
at Module.require (internal/modules/cjs/loader.js:961:19)
at require (internal/modules/cjs/helpers.js:92:18)
at Object.<anonymous> (/home/sankethbk7777/Desktop/React/Projects/social-ape/my-code/social-ape/functions/index.js:19:18)
at Module._compile (internal/modules/cjs/loader.js:1072:14)
⚠ We were unable to load your functions code. (see above)
代码
functions/index.js
const functions = require('firebase-functions');
const admin = require('firebase-admin');
const app = require('express')();
admin.initializeApp();
const config = {
apiKey: 'AIzaSyDMFe1IwnLoui-Meue-FMwNhc1k-MB8vc8',
authDomain: 'socialape-d306c.firebaseapp.com',
projectId: 'socialape-d306c',
storageBucket: 'socialape-d306c.appspot.com',
messagingSenderId: '705972174784',
appId: '1:705972174784:web:1ed87302a774bd1cef1225',
};
const firebase = require('firebase');
firebase.initializeApp(config);
// Signup route
app.post('/signup', (req, res) => {
const newUser = {
email: req.body.email,
password: req.body.password,
confirmPassword: req.body.confirmPassword,
handle: req.body.handle,
};
// TODO: validate date
firebase
.auth()
.createUserWithEmailAndPassword(newUser.email, newUser.password)
.then((data) => {
return res
.status(201)
.json({ message: `user ${data.user.uid} signed up successfully` });
})
.catch((err) => {
console.log(err);
return res.status(500).json({ error: err.code });
});
});
// To tell firebase cloud functions to use routes on express app
// we have written api because we want all our API URL's to start with /api.
exports.api = functions.https.onRequest(app);
我知道导入可能会因为版本更改而略有不同(教程来自 2019 年),但我无法修复它。请帮助我
您应该在云函数中使用 Admin SDK,而不是客户端。也就是说,您可以删除 const firebase = require("firebase")
和 firebase.initializeApp(config);
以及 客户端配置 。创建用户,可以使用createUser()
方法:
app.post('/signup', (req, res) => {
const newUser = {
email: req.body.email,
password: req.body.password,
confirmPassword: req.body.confirmPassword,
handle: req.body.handle,
};
return admin.auth().createUser({ email, password }).then((userRecord) => {
return res.send(`Created user ${userRecord.uid}`)
})
}
我不确定 'handle' 是什么,但您可以使用 Custom Claims 或任何数据库来存储它。
请注意,在云功能或服务器环境中创建用户不会自动让用户登录。返回响应后,您必须将用户重定向到您的登录页面。