我正在创建一个应该可以管理用户访问权限的应用程序。管理员应具有创建,删除和编辑用户帐户的权限。
我正在使用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应该可以解决问题,但我不确定。
Firebase Admin SDK仅可用于受信任的环境,例如您的开发计算机,您控制的服务器或Firebase的Cloud Functions。(有意地)不适用于客户端应用程序,例如在Android或iOS上部署的客户端应用程序,无论是使用本机代码构建的应用程序还是通过Flutter构建的应用程序。
唯一的选择是在受信任的环境中使用Admin SDK来实现所需的功能,并将端点公开给Flutter应用。如果最终这样做,请确保保护对端点的访问,以便只有应用程序的管理员用户才能访问它。有关如何使用Cloud Functions保护访问的示例,请参阅functions-samples repo中的此示例。