添加具有添加Auth用户权限的firebase控制台用户,但不删除数据库

时间:2017-10-09 08:28:29

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

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

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

目前我将它们添加为项目编辑器,但不熟悉它。

2 个答案:

答案 0 :(得分: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端点提供给您的客户端,或构建一个可用于调用此端点的基本应用程序/网络界面。

答案 1 :(得分:0)

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

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

  

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