javascript - 在 AngularFire2 中获取用户 ID 的最安全方法

标签 javascript angular typescript firebase angularfire2

我在弄清楚哪种方法是在 AngularFire2 中获取经过身份验证的用户的 uid 的最安全方法时遇到了一个小问题。我注意到有两种方法可以实现这一点。我不确定哪种获取方式最安全,以防其中一种方式出现问题/必须事先满足某些条件。

方法一:使用auth变量

constructor(private afAuth: AngularFireAuth) { 
    let uid = this.afAuth.auth.currentUser.uid
}

方法二:订阅

constructor(private afAuth: AngularFireAuth) { 
    let uid = this.afAuth.authState.subscribe(user => user.uid)
}

最佳答案

我认为您正在为方法 2 寻找类似的东西。

constructor(private afAuth: AngularFireAuth) { 
  this.afAuth.authState.subscribe(user => {
    if(user) {
      this.uid = user.uid;
    } else {
      // Empty the value when user signs out
      this.uid = null;
    }
  });
}

在这种情况下,它会比方法 1 更好。目前您将 var“uid”设置为订阅,而不是实际的 uid 值。我还添加了一个检查以确保用户在访问 uid 属性之前存在。

第一个选项的问题是,如果用户注销并以不同的帐户重新登录,uid 将保持不变。后者订阅了 auth 状态,所以你不会遇到这个问题。

希望这对您有所帮助!

关于javascript - 在 AngularFire2 中获取用户 ID 的最安全方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45829611/

相关文章:

javascript - Rails 4 - 来自公共(public)文件夹的样式表

Javascript websocket异步不休眠

javascript - Angular2 Typescript如何从对象内部检索数组

Angular 单元测试 : TypeError: Cannot read property 'root' of undefined

typescript - 为什么 Webpack 5 包含我未使用的 TypeScript 枚举导出,即使启用了 Tree Shaking?

unit-testing - 如何为 Typescript 类型编写负面测试?

javascript - 如何使日期选择器无法选择某些月份?

javascript - Socket.IO 中的房间名称未正确分配

Angular Material MatChipList MatError 在没有焦点的情况下设置 errorstate 时不可见

javascript - 在 Angular 8 中使用 @viewChild