我正在尝试创建具有自定义声明的用户。我正在使用Firebase Cloud函数。问题是,当我创建(注册(用户时,onCreate不会触发。我正在遵循谷歌提供的这个教程。https://firebase.google.com/docs/auth/admin/custom-claims我部署了我的功能,区域是us-central1
云功能版本:
firebase-admin": "^8.9.0
firebase-functions": "^3.3.0
我使用Vue JS作为前端
我的函数/Index.js
const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp();
exports.ProccessSignUp = functions.auth.user().onCreate(async (user) =>{
console.log("Email"+user.email);
if (user.email){
const customClaims = {
admin:true
};
return admin.auth().setCustomUserClaims(user.uid,customClaims)
.then(() =>{
const metadataRef = admin.database().ref('metadata/' +user.uid);
return metadataRef.set({refeshTime:new Date().getTime()})
}).catch(err =>{
console.log(err.message)
})
}
});
我的注册使用电子邮件和密码
userSignUp({dispatch},payload){
firebase.auth().createUserWithEmailAndPassword(payload.email, payload.password)
.then(user =>{
user.user.sendEmailVerification()
.then(() =>
alert('Your account has been created! Please, verify your account'),
dispatch('userSignOut'),
).catch(err =>{
console.log(err.message)
})
}).catch(err =>{
console.log(err.message)
})
},
oAuthStateChanged
router.beforeEach(async (to, from, next) => {
const user = await new Promise((resolve) => {
firebase.auth().onAuthStateChanged(async user => {
await store.dispatch("autoSignIn", user);
resolve(user)
});
});
const requiresAuth = to.matched.some(record => record.meta.requiresAuth)
if (requiresAuth) {
if (!user){
next(false)
}else {
if (user.emailVerified){
next();
}else {
alert('Please verify your account')
await store.dispatch("userSignOut", user);
}
}
} else {
next()
}
});
如文档中所述,使用Cloud函数,您可以"从函数中发出日志行,使用标准的JavaScript日志记录调用,如console.log
和console.error
"。
然后,可以在Firebase控制台、Stackdriver Logging UI或通过Firebase命令行工具查看Cloud Functions日志。
因此,例如,您应该能够通过查看Firebase控制台来确认您的云功能是否正确运行。
我在本地运行云功能时也遇到了同样的情况。我的user().onCreate()
触发功能也没有触发。
export const addNewUser = auth
.user()
.onCreate((user) => {
// Do something
})
我试了很多方法,但一切都很好。最后,我通过运行这个命令将我的firebase工具更新到了最新版本,它开始发挥作用。
npm install -g firebase-tools@latest
希望这能帮助到别人。
Custom Token
登录用户,则不会触发functions.auth.user().onCreate
。
当用户首次使用自定义令牌登录时,不会触发云功能事件。
https://firebase.google.com/docs/functions/auth-events#:~:text=A%20Cloud%20Functions%20event%20is%20not%20triggered%20when%20a%20user%20sign%20in%20for%20the%20first%20time%20using%20a+20custom%20token