因此,我遇到了这样的问题:每次添加新用户帐户时,它都会踢出已登录的当前用户。我阅读了firebase api,并说:“ 如果创建了新帐户,则该用户会自动登录“ 但是他们从没有说过避免这种情况的任何其他事情。
//ADD EMPLOYEES addEmployees: function(formData){ firebase.auth().createUserWithEmailAndPassword(formData.email, formData.password).then(function(data){ console.log(data); }); },
我是管理员,正在向我的网站添加帐户。如果我可以在不注销并登录到新帐户的情况下添加帐户,我会很高兴。任何方式我都可以避免这种情况?
这实际上是可能的。
但并非直接,做到这一点的方法是创建第二个auth引用,并使用该引用创建用户:
var config = {apiKey: "apiKey", authDomain: "projectId.firebaseapp.com", databaseURL: "https://databaseName.firebaseio.com"}; var secondaryApp = firebase.initializeApp(config, "Secondary"); secondaryApp.auth().createUserWithEmailAndPassword(em, pwd).then(function(firebaseUser) { console.log("User " + firebaseUser.uid + " created successfully!"); //I don't know if the next statement is necessary secondaryApp.auth().signOut(); });
如果您未指定用于操作的Firebase连接,则默认情况下将使用第一个。
编辑
对于新用户的实际创建,除了管理员之外,没有其他人或其他人可以在第二个auth引用中进行身份验证,因为创建帐户所需的只是auth引用本身。
以下内容未经测试,但需要考虑
您要做的事情就是将数据写入Firebase。通常的做法是用户可以编辑/更新自己的用户信息,因此当您使用第二个auth引用编写此信息时,它应该可以工作。但是,如果您具有该用户的角色或权限,请确保使用具有正确权限的auth引用进行编写。在这种情况下,主要身份验证是admin,第二个身份验证是新创建的用户。
你可以将Firebase功能用于添加用户。
const functions = require('firebase-functions'); const admin = require('firebase-admin'); admin.initializeApp(); const cors = require('cors')({ origin: true, }); exports.AddUser = functions.https.onRequest(( req, res ) => { // Grab the text parameter. cors( req, res, () => { let email = req.body.email; let passwd = req.body.passwd; let role = req.body.role; const token = req.get('Authorization').split('Bearer ')[1]; admin.auth().verifyIdToken(token) .then( (decoded) => { // return res.status(200).send( decoded ) return creatUser(decoded); }) .catch((err) => { return res.status(401).send(err) }); function creatUser(user){ admin.auth().createUser({ email: email, emailVerified: false, password: passwd, disabled: false }) .then((result) => { console.log('result',result); return res.status(200).send(result); }).catch((error) => { console.log(error.message); return res.status(400).send(error.message); }) } }); });