如何在 Flutter 中使用 Firebase Admin SDK?
How to use Firebase Admin SDK in Flutter?
我正在创建一个我应该能够管理用户访问权限的应用程序。管理员应具有创建、删除和编辑用户帐户的权限。
我正在使用 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 只能在受信任的环境中使用,例如您的开发机器、您控制的服务器或 Cloud Functions for Firebase。它(有意)不可用于客户端应用程序,例如部署在 Android 或 iOS 上的应用程序,无论是在使用本机代码构建它们时,还是在通过 Flutter 构建它们时。
唯一的选择是在受信任的环境中使用 Admin SDK 实现您想要的功能,并向您的 Flutter 应用公开一个端点。如果您最终这样做,请确保对端点的访问安全,以便只有您应用的管理员用户才能访问它。有关如何使用 Cloud Functions 保护访问的示例,请参阅此 sample in the functions-samples repo。
我正在创建一个我应该能够管理用户访问权限的应用程序。管理员应具有创建、删除和编辑用户帐户的权限。
我正在使用 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 只能在受信任的环境中使用,例如您的开发机器、您控制的服务器或 Cloud Functions for Firebase。它(有意)不可用于客户端应用程序,例如部署在 Android 或 iOS 上的应用程序,无论是在使用本机代码构建它们时,还是在通过 Flutter 构建它们时。
唯一的选择是在受信任的环境中使用 Admin SDK 实现您想要的功能,并向您的 Flutter 应用公开一个端点。如果您最终这样做,请确保对端点的访问安全,以便只有您应用的管理员用户才能访问它。有关如何使用 Cloud Functions 保护访问的示例,请参阅此 sample in the functions-samples repo。