Firebase功能设置自定义声明

时间:2020-05-15 23:19:03

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

我对添加自定义声明的功能有疑问(我怀疑)。这是代码:

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

exports.addAdminRole = functions.https.onCall((data)=> {
  //get user and add custom claim (admin)
  return admin.auth().getUserByEmail(data.email).then(user => {
    return admin.auth().setCustomUserClaims(user.uid, {
      admin: true
    });
  }).then( () => {
    return {
      message: `Success! ${data.email} has been made an admin`,
    }
  })
})

我使用以下代码调用该函数(我使用Redux和React):

let addAdminRole = window.firebaseFunctions.httpsCallable('addAdminRole');

addAdminRole({email:employee.email}).then(res => {
          console.log(res)
    })

我收到了预期的消息({message:Success! ${data.email} has been made an admin}),但未添加声明。

我通过axios制作了一个单独的Firebase Auth REST API进行身份验证,但是声称“ admin”不存在。

我有一个Spark(免费)计费计划,当检查Firebase功能的日志时,我看到“未配置计费帐户。无法访问外部网络,并且配额受到严格限制。执行addAdminRole时,配置帐单帐户以消除这些限制。

据我所读,这是一条消息,告诉您您始终可以享受免费计划,访问内部(google)信息应该没有问题。

这是axios请求的代码:

axios({
      method:'post',
      url:urlAuth,
      data:{
        email:employee.email,
        password:employee.password,
        returnSecureToken: true
      }
    }).then(res => {
      delete employee.password;
      console.log(res)
      const expirationDate = new Date().getTime() + res.data.expiresIn * 1000;
      localStorage.setItem('token',res.data.idToken);
      localStorage.setItem('expirationDate',expirationDate);
      localStorage.setItem('userId', res.data.localId);
      localStorage.setItem('admin', res.data.admin)

      dispatch(checkAuthTimeout(res.data.expiresIn));

      if(logIn){
        dispatch(endAuth(res.data.idToken,res.data.localId,res.data.admin));
      }else{
        employee.userId = res.data.localId;
        dispatch(addEmplRegister(employee,res.data.idToken,admin));
      }
    }).catch(err => {
      dispatch(errorAuth(err.message))
    })

发现了问题,使用REST API身份验证时不会传输有关声明的信息

1 个答案:

答案 0 :(得分:0)

设置具有现有JWT令牌的用户的自定义声明不会立即生效。这些用户将必须:

  1. 退出并再次登录,
  2. 强制刷新其令牌,或者
  3. 等待最多一小时,该令牌可以由Fireabse Auth SDK自动刷新。

然后,他们的新令牌将显示自定义声明。