html - 如何检查和存储用户是否正确登录?
问题描述
有没有更好的方法来检查用户是否登录?因为我对多个应用程序使用以下方法并以某种方式为它们提供服务会导致差异,因为它会将当前应用程序的项目与其他应用程序的项目混淆。
我检查用户是否像这样登录:
constructor(private afAuth: AngularFireAuth, private router: Router, private db: AngularFirestore) {
this.userData = new ReplaySubject<UserDetails>();
afAuth.auth.onAuthStateChanged(user => {
if (user) {
this.user = user;
const local = localStorage.getItem('user');
if (local !== null) {
this.userData.next(JSON.parse(localStorage.getItem('user')));
} else {
this.fetchUserData();
}
} else {
localStorage.setItem('user', null);
}
});
}
get isLoggedIn(): boolean {
const user = localStorage.getItem('user');
return user !== 'null';
}
解决方案
如果每个应用程序都是从自己的域提供的,那么每个应用程序都有自己的localStorage
,并且它们之间不会有任何冲突/混淆。
如果您为同一个域中的多个应用程序提供服务,则必须在本地存储中为每个应用程序使用唯一名称。类似于localStorage.setItem('app1_user', null)
vs的东西localStorage.setItem('app2_user', null)
。
但请注意,Firebase 身份验证每个域只有一个经过身份验证的用户。因此,如果您为来自同一个域的多个应用程序提供服务,则用户(根据 Firebase 身份验证)同时登录所有这些应用程序(或不登录)。
推荐阅读
- android - 即使在应用程序被杀死后如何缓存数据一段时间?
- javascript - 如何设置picker的边框
- python - tensorflow中是否有类似的代码torch.backends.cudnn.benchmark/torch.cuda.synchronize()?
- scala - 如何添加字段以便稍后为 graphQL 定义与 Sangria 的关系?
- excel - VBA 宏比较日期取最早
- c++ - 读取访问冲突。_Mycont 为 nullptr
- javascript - 如何在本机反应中关闭或关闭警报框...?
- node.js - 如何验证恶意输入?
- kotlin - kotlin 中 '=lazy' 之间的 'by lazy' 有什么区别?
- javascript - 仅使用属性访问器(点表示法或括号表示法),如何直接设置未定义的嵌套属性?