如何在Flutter中使用Firebase Admin SDK?

时间:2019-01-21 12:53:34

标签: firebase flutter firebase-admin

我正在创建一个应该可以管理用户访问权限的应用程序。管理员应具有创建,删除和编辑用户帐户的权限。

我正在使用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 Admin应该可以解决问题,但我不确定。

1 个答案:

答案 0 :(得分:2)

Firebase Admin SDK仅可用于受信任的环境,例如您的开发计算机,您控制的服务器或Firebase的Cloud Functions。 (有意)不适用于客户端应用程序,例如在Android或iOS上部署的客户端应用程序,无论是使用本机代码构建的应用程序,还是通过Flutter构建的应用程序,均不可用。

唯一的选择是在受信任的环境中使用Admin SDK来实现所需的功能,并将端点公开给Flutter应用程序。如果最终这样做,请确保保护对端点的访问,以便只有应用程序的管理员用户才能访问它。有关如何使用Cloud Functions保护访问的示例,请参见此sample in the functions-samples repo