Есть ли какая-либо функция в аутентификации пользователя для пользовательских ролей? - PullRequest
0 голосов
/ 03 января 2019

Я пытаюсь создать интерфейс входа в систему для моего веб-приложения, использующего Firebase.Я хотел добавить user role к моей учетной записи, используя собственную систему аутентификации Firebase.(Эл. адрес).Но он не поддерживает никаких опций для добавления user role.Такие как "Admin" и "Users".

Это для Firebase (в настоящее время 5.7.2) и HTML5.

login.js (текущая аутентификация входа в систему)

(function(){
var ui = new firebaseui.auth.AuthUI(firebase.auth());

var uiConfig = {
    callbacks: {
      signInSuccessWithAuthResult: function(authResult, redirectUrl) {
        // User successfully signed in.
        // Return type determines whether we continue the redirect automatically
        // or whether we leave that to developer to handle.
        return true;
      },
      uiShown: function() {
        // The widget is rendered.
        // Hide the loader.
        document.getElementById('loader').style.display = 'none';
      }
    },
    // Will use popup for IDP Providers sign-in flow instead of the default, redirect.
    signInFlow: 'popup',
    signInSuccessUrl: 'index.html',
    signInOptions: [
      // Leave the lines as is for the providers you want to offer your users.
      firebase.auth.EmailAuthProvider.PROVIDER_ID,
    ],
  };

  ui.start('#firebaseui-auth-container', uiConfig);
})()

Я ожидаю добавить опцию или поле для роли пользователя где-то в js как уникальный идентификатор для электронного письма?(adminabc@xx.com = admin, userabc@xx.com = user) или дополнительное поле для firebase.(добавление выделенной таблицы в базу данных вместо использования встроенной аутентификации пользователя.)

1 Ответ

0 голосов
/ 03 января 2019

Не существует API «Роли пользователя» для Firebase Auth, но есть способы, с помощью которых вы можете реализовать авторизацию на основе ролей в вашем приложении.

База данных

Одним из способов являетсяВы упомянули, чтобы сохранить эти данные в вашей базе данных.Преимущество этого заключается в том, что его легко реализовать.

Вы можете применить правила, выполнив поиск в ваших правилах базы данных для Firestore и базы данных реального времени.

База данных реального времени

{
  "rules": {
    "adminContent": {
      ".write": "root.child('users').child(auth.uid).child('admin').val() === true"
    }
  }
}

Firestore

service cloud.firestore {
  match /databases/{database}/documents {
    match /articles/{article} {
      allow write: if get(/databases/$(database)/documents/users/$(request.auth.uid)).data.admin == true
    }
  }
}

Недостатком сохранения ваших ролей и учетных данных в базе данных является то, что вы не можете использовать эту информацию в разных продуктах.Вы не можете написать правило базы данных firestore, которое обращается к правилам RTDB или наоборот.

Настраиваемые утверждения

Если вы хотите, чтобы ваши роли работали между службами (используя одни и те же данные ролей в RTDB,Firestore и Firebase Storage), тогда вам следует изучить установку пользовательских утверждений, что очень хорошо объясняется в документации .

После настройки вы можете использовать настраиваемые утверждения для реализации роли.на основе или групповых прав доступа для разных продуктов.

database.rules.json

{
  "rules": {
    "adminContent": {
      ".read": "auth.token.admin === true",
      ".write": "auth.token.admin === true",
    }
  }
}

firestore.rules / storage.rules

Правила Firestore и Storage имеют похожий синтаксис для правил, и вы обнаружите, чтоallow оператор одинаков для обоих.

service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read, write: if request.auth.token.admin == true;
    }
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...