Vic*_* Le 48 javascript firebase firebase-authentication
所以我有这个问题,每当我添加一个新的用户帐户时,它就会启动已经登录的当前用户.我读了firebase api并且说" 如果新帐户已创建,则用户自动登录"但他们从未说过任何关于避免这种情况的事情.
//ADD EMPLOYEES
addEmployees: function(formData){
firebase.auth().createUserWithEmailAndPassword(formData.email, formData.password).then(function(data){
console.log(data);
});
},
Run Code Online (Sandbox Code Playgroud)
我是管理员,我正在为我的网站添加帐户.如果我可以添加帐户而不退出并登录新帐户,我希望如此.我能避免这种情况吗?
And*_*ool 85
更新20161110 - 以下原始答案
另请查看此答案以获得不同的方法.
原始答案
这实际上是可能的.
但不是直接的,这样做的方法是创建第二个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();
});
Run Code Online (Sandbox Code Playgroud)
如果未指定用于操作的firebase连接,则默认情况下将使用第一个连接.
多个应用参考的来源.
编辑
对于新用户的实际创建,在第二个auth引用上验证没有人,或者其他人,然后是管理员,因为创建帐户所需要的只是auth引用本身.
以下内容尚未经过测试,但需要考虑
您需要考虑的事情是将数据写入firebase.通常的做法是用户可以编辑/更新自己的用户信息,因此当您使用第二个auth引用进行编写时,这应该可行.但是,如果您拥有该用户的角色或权限,请确保使用具有正确权限的auth引用来编写该角色或权限.在这种情况下,主auth是admin,第二个auth是新创建的用户.
Fra*_*len 18
Firebase刚刚发布了firebase-admin SDK,它允许服务器端代码用于此和其他常见的管理用例.阅读安装说明,然后深入了解有关创建用户的文档.
原始答案
目前这是不可能的.创建电子邮件+密码用户会自动在新用户中签名.
小智 12
首先将当前用户存储在名为originalUser的变量中
let originalUser = Auth.auth().currentUser
Run Code Online (Sandbox Code Playgroud)
然后,在创建新用户的完成处理程序中,使用 updateCurrentUser 方法恢复原始用户
Auth.auth().updateCurrentUser(originalUser, completion: nil)
Run Code Online (Sandbox Code Playgroud)
这是一个使用 Web SDK 的简单解决方案。
import admin from 'firebase-admin';
import * as functions from 'firebase-functions';
const createUser = functions.https.onCall((data) => {
return admin.auth().createUser(data)
.catch((error) => {
throw new functions.https.HttpsError('internal', error.message)
});
});
export default createUser;
Run Code Online (Sandbox Code Playgroud)
import firebase from 'firebase/app';
const createUser = firebase.functions().httpsCallable('createUser');
createUser({ email, password })
.then(console.log)
.catch(console.error);
Run Code Online (Sandbox Code Playgroud)
createUser({ email, password })
.then(({ data: user }) => {
return database
.collection('users')
.doc(user.uid)
.set({
firstname,
lastname,
created: new Date(),
});
})
.then(console.log)
.catch(console.error);
Run Code Online (Sandbox Code Playgroud)
我刚刚创建了一个Firebase函数,该函数在创建Firestore文档时触发(规则仅写给admin用户)。然后使用admin.auth()。createUser()正确创建新用户。
export const createUser = functions.firestore
.document('newUsers/{userId}')
.onCreate(async (snap, context) => {
const userId = context.params.userId;
const newUser = await admin.auth().createUser({
disabled: false,
displayName: snap.get('displayName'),
email: snap.get('email'),
password: snap.get('password'),
phoneNumber: snap.get('phoneNumber')
});
// You can also store the new user in another collection with extra fields
await admin.firestore().collection('users').doc(newUser.uid).set({
uid: newUser.uid,
email: newUser.email,
name: newUser.displayName,
phoneNumber: newUser.phoneNumber,
otherfield: snap.get('otherfield'),
anotherfield: snap.get('anotherfield')
});
// Delete the temp document
return admin.firestore().collection('newUsers').doc(userId).delete();
});
Run Code Online (Sandbox Code Playgroud)
您可以使用函数。https.onCall()
exports.createUser= functions.https.onCall((data, context) => {
const uid = context.auth.uid; // Authorize as you want
// ... do the same logic as above
});
Run Code Online (Sandbox Code Playgroud)
叫它。
const createUser = firebase.functions().httpsCallable('createUser');
createUser({userData: data}).then(result => {
// success or error handling
});
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
16689 次 |
最近记录: |