【发布时间】:2020-06-22 07:24:55
【问题描述】:
我试图做的是设置一个基于角色的授权(普通用户和订阅用户),并基于角色用户被重定向到不同的屏幕。 我被困住了。我尝试了不同的解决方案,并查看了有关该概念的每个教程。我理解这个概念是如何工作的,但是很难在我的代码中设置它。我不确定在哪里声明订阅用户以及如何创建函数以及如何导航它们! 非常感谢任何帮助! 这就是我的代码的样子!
//这是我的认证服务
static void signUpUser(
BuildContext context, String name, String email, String password) async {
try {
AuthResult authResult = await _auth.createUserWithEmailAndPassword(
email: email,
password: password
);
FirebaseUser signedInUser = authResult.user;
if (signedInUser != null) {
_firestore.collection('/users').document(signedInUser.uid).setData({
'name': name,
'email': email,
'profileImageUrl': '',
});
//注册页面
final _formKey = GlobalKey<FormState>();
String _name, _email, _password;
_submit() {
if(_formKey.currentState.validate()){
_formKey.currentState.save();
AuthService.signUpUser(context, _name, _email, _password);
}
}
//我的 main.dart
Widget _getScreenId() {
return StreamBuilder<FirebaseUser>(
stream: FirebaseAuth.instance.onAuthStateChanged,
builder: (BuildContext context, snapshot) {
if (!snapshot.hasData) {
Provider.of<UserData>(context).currentUserId = snapshot.data.uid;
return LoginScreen();
} else {
return HomeScreen();
}
},
);
}
//用户模型 导入'package:cloud_firestore/cloud_firestore.dart';
class User {
final String id;
final String name;
final String profileImageUrl;
final String email;
final String bio;
User({
this.id,
this.name,
this.profileImageUrl,
this.email,
this.bio
});
【问题讨论】:
-
“我理解这个概念是如何工作的,但是很难在我的代码中设置它。”由于您的代码没有显示任何有关用户角色的信息,因此很难提供帮助。你问的是什么具体的代码?如果做不到这一点,我建议查看youtube.com/watch?v=oFlHzF5U-HA
-
他坦率地说。谢谢您的答复!我用我的用户模型更新了问题。老实说,我不确定如何定义用户角色。
-
在这种情况下,视频将是一个很好的起点。存储角色信息的两个最常见位置是:1) 作为该用户的 Firebase 身份验证令牌中的自定义声明,2) 在与该用户关联的文档中的数据库中。无论您选择哪一个,您都应该在受信任的环境(您的开发机器、您控制的服务器或云功能)中设置此角色,否则任何人都可以更改自己的角色。
标签: flutter google-cloud-firestore firebase-authentication