Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 如何根据用户拥有的存储在firebase数据库中的属性将用户引导到不同的主页?_Angular_Firebase_Firebase Realtime Database_Ionic2_Firebase Authentication - Fatal编程技术网

Angular 如何根据用户拥有的存储在firebase数据库中的属性将用户引导到不同的主页?

Angular 如何根据用户拥有的存储在firebase数据库中的属性将用户引导到不同的主页?,angular,firebase,firebase-realtime-database,ionic2,firebase-authentication,Angular,Firebase,Firebase Realtime Database,Ionic2,Firebase Authentication,好的,我正在写一个登录页面,理想情况下应该将用户引导到两个不同主页中的一个。根据属性的值,“tagtag”可以是“staff”或“admin”,存储在firebase的实时数据库中。因此,我需要检索该数据,检查该属性的值,并决定将它们指向何处 它还应该同时做的另一件事是,如果输入的电子邮件或密码不正确,或者用户没有帐户,则会发出警告消息 我已尝试将所有这些合并到我的“login.ts”页面中,但我收到一个运行时错误,显示“Firebase.child失败:第一个参数是无效路径:”我的第一个参数是

好的,我正在写一个登录页面,理想情况下应该将用户引导到两个不同主页中的一个。根据属性的值,“tagtag”可以是“staff”或“admin”,存储在firebase的实时数据库中。因此,我需要检索该数据,检查该属性的值,并决定将它们指向何处

它还应该同时做的另一件事是,如果输入的电子邮件或密码不正确,或者用户没有帐户,则会发出警告消息

我已尝试将所有这些合并到我的“login.ts”页面中,但我收到一个运行时错误,显示“Firebase.child失败:第一个参数是无效路径:”我的第一个参数是user.email 这是我的密码。请帮忙

从'@angular/core'导入{Component}; 从'ionic angular'导入{NavController}; 从“../signup/signup”导入{SignupPage}; 从“angularfire2/database”导入{AngularFireDatabase,FirebaseListObservable}; 从'angularfire2/auth'导入{AngularFireAuth}; 从“../home manager/home manager”导入{home MANAGERPAGE}; 从“../home staff/home staff”导入{HomeStaffPage}; 从“../../models/User”导入{User}; 从“firebase”导入*作为firebase; @组成部分{ 选择器:“页面登录”, templateUrl:'login.html' } 导出类登录页{ user={}作为用户; 公共消防机构:任何; 公共用户档案:任何; 公共用户标签:任意; 公共t:任何; constructorpublic navCtrl:NavController,public angfire:AngularFireAuth { this.fireAuth=firebase.auth; this.userProfile=firebase.database.ref'users'; } viewUserEmail:任何 { var userRef=this.userProfile.childuserEmail; 返回userRef.once'value'; } 戈托西格努帕拉姆斯 { 如果!params params={}; this.navCtrl.pushSignupPage; } 哥特式地图 { 如果!params params={}; this.navCtrl.pushLoginPage; } 显示用户电子邮件 { var=这个; this.viewUsertheUserEmail.ThenSapshot=> { userTag=snapshot.val.tag; } 返回this.userTag; } 异步登录用户:用户 { 此.angfire.auth.signiWithEmailandPasswordUser.email,user.password .thenuser=>{ this.t=this.displayUseruser.email; ifthis.t=='staff'{this.navCtrl.setRootHomeStaffPage;} else{this.navCtrl.setRootHomeManagerPage;} },err=>{ 让味精; 开关错误['code'] { //切换返回的代码以查看将显示的消息 案例验证/错误密码: msg=电子邮件或密码错误。; 打破 未找到案例身份验证/用户: msg='未找到用户'; 打破 案例验证/无效电子邮件: msg='电子邮件或密码错误'; 打破 } alertmsg; }//。然后到此结束 } } 只有两件事:

1-我认为对于这样一个简单的事情,你需要编写很多代码,我们可以减少它

2-我强烈建议您将用户保存在用户创建帐户时创建的uuid中,这样更安全。所以你会有一个

Your_BD
|_ users
   |_ user_uuid
      |_ email: email
      |_ tag: tag
因此,您需要做的是:登录>获取用户电子邮件>获取用户节点>获取标记,问题是Angular或TS,我忘记了谁,抱歉是非阻塞的,因此它不会等待您的函数返回来检查标记并将用户发送到页面,因此,使用firebase方法返回的承诺来操作要执行的内容并正确执行代码

在登录功能中,您可以执行此操作。我不使用错误部分:

async login(user:User)
{ 
  this.angfire.auth.signInWithEmailAndPassword(user.email,user.password)
  .then(user => {
    firebase.database().ref('users/' + user.email).once('value', snapshot =>{
      if(snapshot.val().tag == 'staff'){
        this.navCtrl.setRoot(HomeStaffPage);
      } else {
        this.navCtrl.setRoot(HomeManagerPage);
      }
    })
  }, err =>{...})
}

希望这有帮助:D

该代码段是否属于某个服务?组件?这属于组件。所有这些都写在一个类中。你能添加它吗?是的,我在数据库中存储信息。它是firebase实时数据库的默认结构。这是因为区别因素“标签”不是firebase中默认“用户属性”的一部分。