【问题标题】:Add firebase console user with permission to add Auth users, but not delete database添加具有添加 Auth 用户但不能删除数据库的权限的 firebase 控制台用户
【发布时间】:2018-03-20 09:28:33
【问题描述】:

我有一个客户想要访问 Firebase 控制台,以便他们可以在身份验证模块中手动添加用户。

我尝试通过“用户和权限”添加它们,但找不到任何适合在身份验证中添加用户且在数据库中没有写入权限的角色。

目前我将它们添加为项目编辑器,但对此并不满意。

【问题讨论】:

    标签: firebase firebase-authentication firebase-console google-iam


    【解决方案1】:

    授予对应用仪表板的管理员访问权限可能不是管理应用内用户的正确答案。它甚至可能是一个安全风险。在我看来,这相当于让您的应用用户通过 shell 提示访问您的物理服务器,而不是创建 API 供他们调用。

    这里更好的选择是设置一个 Google Cloud Functions 端点,该端点将接受 API 请求并代表他们创建用户,根据您确定的某些标准验证他们的访问权限。

    1)Enable and deploy云函数

    2) 设置Authenticated HTTPS endpoint

    3) 创建新用户的函数代码如下所示:

    const functions = require('firebase-functions');
    const admin = require('firebase-admin');
    admin.initializeApp();
    const express = require('express');
    const cookieParser = require('cookie-parser')();
    const cors = require('cors')({origin: true});
    const app = express();
    
    // See https://github.com/firebase/functions-samples/blob/Node-8/authorized-https-endpoint/functions/index.js
    const validateFirebaseIdToken = require('./validateFirebaseIdToken');
    
    app.use(cors);
    app.use(cookieParser);
    app.use(validateFirebaseIdToken);
    app.get('/createUser', (req, res) => {
    
      const userData = req.params;
    
      // This represents some criteria you set for determining who can call this endpoint
      // possible a list of approved uids in your database?
      if( req.user.uid !== VALID_ADMIN_USER ) {
        res.status(401).send('Unauthorized');
        return;
      }
    
      // See https://firebase.google.com/docs/auth/admin/manage-users#create_a_user
    
      admin.auth().createUser({
        email: userData.email,
        displayName: userData.name,
        ...
      })
        .then(function(userRecord) {
          // See the UserRecord reference doc for the contents of userRecord.
          res.json({result: 'success', uid: userRecord.uid});
          console.log("Successfully created new user:", userRecord.uid);
        })
        .catch(function(error) {
          console.error("Failed to create new user");
          console.error(error);
          res.status(500).json({status: 'error', error: 'Unable to process the request'});
        });
    
    });
    
    // This HTTPS endpoint can only be accessed by your Firebase Users.
    // Requests need to be authorized by providing an `Authorization` HTTP header
    // with value `Bearer <Firebase ID Token>`.
    exports.app = functions.https.onRequest(app);
    

    4) 向您的客户端提供 API 端点,或构建他们可以使用的基本应用程序/Web 界面来调用此端点。

    【讨论】:

      【解决方案2】:

      因此,请转到 Google Cloud Platform(从 Firebase 控制台),然后选择管理角色,您可以从中创建 Custom roles

      请注意,自定义角色目前处于测试阶段,您可能无法实现所需的功能,但正如文档所建议的那样

      自定义角色可让您对权限进行分组并将其分配给 您的项目或组织。您可以手动选择权限或 从另一个角色导入权限。

      【讨论】:

      • 有大量的自定义。哪些角色与身份验证相对应?在使用默认角色时,我发现缺少一些角色甚至无法访问控制台。
      • 该产品处于测试阶段,所以我相信它可能仍未列出。因此,目前您无法实现该功能
      猜你喜欢
      • 1970-01-01
      • 2011-03-07
      • 2018-07-30
      • 2011-06-12
      • 2017-12-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-14
      相关资源
      最近更新 更多