Firebase onCreate 向 auth.user 添加自定义声明 [英] Firebase onCreate add custom claims to the auth.user

本文介绍了Firebase onCreate 向 auth.user 添加自定义声明的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试添加自定义声明,isRegistered 到 firebase.我的 Firestore 有另一个 user 集合来保存注册信息记录.现在我正在尝试保留 isRegistered 自定义声明,但似乎无法正常工作.

I am trying to add a custom claims, isRegistered to firebase. My firestore has another user collection to keep register info records. Now I am trying to keep a isRegistered custom claim but I can not seem to get it work.

exports.addRegisteredRole = functions.database.ref('/user')
    .onCreate((snap, context) => {
      return // **I added this later, but the issue still remains.**
        admin.auth()
            .setCustomUserClaims(context.auth.uid, {isRegistered: true})
            .then(() => {
                console.log('done', snap)
                return {
                    message: 'done',
                    data: snap
                }
            })
            .catch(err => {
                console.log('something went wrong', err);
                return err
            })
    });

我正在检查此声明,

currentUser.getIdTokenResult()
        .then(res => {
            console.log(res.claims.isRegistered)
        })

(授权用户对象).即使我重新登录它仍然未定义.我做错了什么吗,我对 firebase 很陌生.

(auth user object). Even if I re-logged it remains undefined. Am I doing something wrong, I am very new to firebase.

推荐答案

问题在于您的 onCreate 触发器.您假设您在 context.auth 对象中获取了 uid,这是不正确的.

The issue is with your onCreate trigger. You assumed you're getting the uid in the context.auth object, which is not correct.

onCreate 触发器将在您的用户"中添加新文档时自动触发.收藏.在这种情况下, context.aut.uid 是未定义的.您应该在函数日志中对此进行跟踪.

The onCreate trigger will be triggered automatically on the addition of a new document in your "user" collection. In this case, the context.aut.uid is undefined. You should trace this in your function logs.

您可以通过多种方式实现您的目标

  1. 如果用户记录文档以用户ID作为文档名称,则可以执行以下操作

exports.addRegisteredRole =
  functions.firestore
    .document('test/{docId}')
    .onCreate((snap, context) => {
      admin.auth()
        .setCustomUserClaims(snap.id, { isRegistered: true })
        .then(() => {
          console.log('done', snap)
          return {
            message: 'done',
            data: snap
          }
        })
        .catch(err => {
          console.log('something went wrong', err)
          return err
        })
    })

  1. 如果您要使用其他名称来命名用户记录文档,或者让 firebase 为您决定名称,那么您必须将 uid 作为文档数据中的属性.然后你使用 docSnapshot.data().uid 而不是 docSnapshot.id 如下

exports.addRegisteredRole =
  functions.firestore
    .document('test/{docId}')
    .onCreate((snap, context) => {
      admin.auth()
        .setCustomUserClaims(snap.data().uid, { isRegistered: true })
        .then(() => {
          console.log('done', snap)
          return {
            message: 'done',
            data: snap
          }
        })
        .catch(err => {
          console.log('something went wrong', err)
          return err
        })
    })

祝你好运

这篇关于Firebase onCreate 向 auth.user 添加自定义声明的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆