测试我的firebase auth在本地触发

时间:2018-05-11 11:32:29

标签: firebase firebase-authentication google-cloud-functions

我想在本地测试一些firebase数据库和auth触发器,并找到了这个文档https://firebase.google.com/docs/functions/local-emulator#invoke_realtime_database_functions

按照我输入的说明进行操作

firebase functions:shell

然后使用

调用我的自定义firebase触发器
createNewUser({user: {email: 'some@email.com'}},{auth: {uid: '123'}})

然而,这给了我错误

firebase > createNewUser({user: {email: 'some@email.com'}},{auth: {uid: '123'}})
'Successfully invoked function.'
firebase > info: User function triggered, starting execution
info: Function crashed
TypeError: Cannot read property 'toLowerCase' of null

这是我尝试运行的功能:

const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp(functions.config().firebase);

exports.createNewUser = functions.auth.user().onCreate((user) => {
  let lowerCaseEmail = user.email.toLowerCase();
  return admin.database().ref(`/users/${user.uid}/lowerCaseEmail`).set(lowerCaseEmail);
});

我相信我没有在firebase函数中正确调用我的自定义函数:shell。

有人愿意指出我正确的方向吗?

1 个答案:

答案 0 :(得分:3)

根据文档,您在调用Auth函数时必须传递UserRecord(请参阅doc),请参阅您在问题中指向的文档的底部(即{{3} })

执行以下工作:

createNewUser({ disabled: false, 
                displayName: 'Renaud', 
                email: 'Mail@Gmail.com', 
                emailVerified: false, 
                metadata: {creationTime: null, lastSignInTime: null}, 
                photoURL: null, 
                providerData: ['google.com'], 
                uid: '123' })

您可以在数据库中找到新记录,电子邮件为小写。

实际上,由于文档说:"只指定代码所依赖的字段,如果只想运行该功能,则根本不指定。"我已尝试过关注UserRecord对象,也可以

createNewUser({email: 'Mail@Gmail.com', uid: '123'})