Как использовать Firebase Admin SDK во флаттере? - PullRequest
0 голосов
/ 21 января 2019

Я создаю приложение, в котором я должен иметь возможность управлять доступом пользователей.Администратор должен иметь права на создание, удаление и редактирование учетных записей пользователей.

Я использую Firebase для создания учетной записи пользователей.

В настоящее время индивидуально пользователи могут создавать, редактировать и удалять свои учетные записи, нопроблема в том, что это должен делать администратор, а не только пользователи.

import 'dart:async';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:flutter/services.dart';
import 'package:google_sign_in/google_sign_in.dart';

class UserLoader {
  final FirebaseAuth _auth = FirebaseAuth.instance;
  final GoogleSignIn googleSIgnIn = new GoogleSignIn();
  static final UserLoader _singleton = new UserLoader._internal();
  FirebaseUser user;

  factory UserLoader() {
    return _singleton;
  }

  UserLoader._internal();

  Future<FirebaseUser> signInWithEmailAndPassword(email, password) async {
    if (user != null) return user;
    _signInAnonymously().then((value) {
      if (value != null) {
        user = value;
      }
    }).catchError((e) {
      return null;
    });
    if (user == null) {
      FirebaseUser user = await _auth.signInWithEmailAndPassword(
          email: email, password: password).catchError(
              (onError)
                {
                  print(onError);
                });
      return user;
    } else {
      return null;
    }
  }

  Future<FirebaseUser> signInWithGoogle() async {
    if (user != null) return user;
    _signInAnonymously().then((value) {
      if (value != null) {
        user = value;
      }
    }).catchError((e) {
      print(e.toString());
    });
    if (user == null) {
      GoogleSignInAccount googleSignInAccount = await googleSIgnIn.signIn();
      GoogleSignInAuthentication gSA = await googleSignInAccount.authentication;

      FirebaseUser user = await _auth.signInWithGoogle(
          idToken: gSA.idToken, accessToken: gSA.accessToken);
      return user;
    } else {
      return null;
    }
  }

  Future<FirebaseUser> _signInAnonymously() async {
    if (user != null) return user;
    user = await _auth.signInAnonymously();
    return user;
  }

  Future signOut() async {
    await _auth.signOut();
    await googleSIgnIn.signOut();
    user = null;
  }

  Future changePassword(email) async{
    await _auth.sendPasswordResetEmail(email: email);
  }

  Future createNewUser(email){
    _auth.createUserWithEmailAndPassword(email: email, password: "new_pass");
  }


  Future deleteUser(FirebaseUser firebaseUser){
    firebaseUser.delete();
  }
}

Я думаю, что администратор Firebase должен сделать трюк, но я не уверен.

1 Ответ

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

Firebase Admin SDK доступен только для использования в надежных средах, таких как ваш компьютер для разработки, сервер, которым вы управляете, или облачные функции для Firebase.Он (намеренно) недоступен для использования в клиентских приложениях, таких как приложения, развернутые на Android или iOS, ни при создании приложений с собственным кодом, ни при создании их с помощью Flutter.

Единственный вариантзаключается в реализации необходимых функций с помощью Admin SDK в доверенной среде и предоставлении конечной точки вашему приложению Flutter.Если вы в конечном итоге сделаете это, обязательно обеспечьте безопасный доступ к конечной точке, чтобы к ней могли получить доступ только пользователи-администраторы вашего приложения.Пример того, как обеспечить безопасный доступ с помощью облачных функций, см. В этом примере в репозитории functions-samples .

.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...