Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.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
Reactjs 登录后立即显示缺少权限错误消息_Reactjs_Typescript_Firebase_Firebase Authentication_Reactfire - Fatal编程技术网

Reactjs 登录后立即显示缺少权限错误消息

Reactjs 登录后立即显示缺少权限错误消息,reactjs,typescript,firebase,firebase-authentication,reactfire,Reactjs,Typescript,Firebase,Firebase Authentication,Reactfire,我在登录我的应用程序时出现“未捕获的FirebaseError:缺少或权限不足”错误。登录后立即重定向时出现问题。我目前没有错误边界,因此在web控制台中会出现带有此错误消息的空白白色屏幕 我用的是火图书馆 下面是一些代码: 我的切入点:(index.tsx) createRoute(document.getElementById('root')!).render( ); 然后根据身份验证重定向到signin或dashboard的包装器: export const Wrapper=()=>;

我在登录我的应用程序时出现“未捕获的FirebaseError:缺少或权限不足”错误。登录后立即重定向时出现问题。我目前没有错误边界,因此在web控制台中会出现带有此错误消息的空白白色屏幕

我用的是火图书馆

下面是一些代码:

我的切入点:(index.tsx)

createRoute(document.getElementById('root')!).render(
);
然后根据身份验证重定向到signin或dashboard的包装器:

export const Wrapper=()=>;
“我的登录”页面的重要部分是“登录”按钮:

auth.signInWithEmailAndPassword(电子邮件,密码)}>
登录
当我点击按钮时,由于获取用户和验证密码等原因导致了一个小的延迟(我应该稍后在那里加载,但这目前不是问题)。然后,页面变为白色,控制台中出现错误

导致错误的页面是仪表板页面。下面是导致错误的代码:

const user=useUser();
console.log('id',user.uid);//没关系
const accountRef=useFirestore().collection('users').doc(user.uid);
const account=useFirestoreDocDataOnce(accountRef);
console.log('account',account);//也可以
const companyRef=useFirestore().collection('companys').doc(account.company);
const contractsCollectionRef=companyRef.collection(“合同”);
const contracts=useFirestoreCollectionData(contractsCollectionRef,{idField:'id'});
console.log(合同);//从未显示
需要注意的重要一点是,如果我刷新页面,那么AuthCheck会将我直接带到仪表板,并且一切都正常工作

当我登录时,你知道我应该怎么做才能让它工作吗

它不适用于reactfire中的useUser()和useAuth()。它也不会从firebase中对()进行身份验证

编辑 作为临时补丁,我可以将登录按钮的onClick方法更改为:

()=>使用电子邮件和密码(电子邮件,密码)进行身份验证登录。然后(()=>window.location.reload())
它的速度足够快,刷新后,一切正常。但我认为最好不要重新加载

编辑2 使用react路由器库时,同样的问题仍然存在

索引


单击“登录”按钮:

onClick={() => auth.signInWithEmailAndPassword(email, password).then(() => history.push('/dashboard'))}

当我添加一个路由系统(react router dom)时,我终于修复了它 . 索引


我在登录时向dashboard添加了重定向,在注销时向signIn添加了重定向

我将必须找到一种方法来处理自动注销,如果不登录,而在一个安全的页面。但据我所知,我们不能直接依赖useAuth,也不能依赖于比显示组件更复杂的路由。如果您拨打的电话需要经过身份验证才能工作,那么最好使用真正的路由系统

编辑 若要自动重定向到登录页面并记住您所在的位置,您可以替换


{
用户
?//所有安全路由
: 
}

其中
user
useUser()。看

此处提到了一种可能的方法,建议在注销后立即调用以下函数:

export const clearFirestoreCache=()=>{
const map=全局此[''反应火重加载可观测值'];
Array.from(map.keys()).forEach(
(key)=>key.includes('firestore')&&map.delete(key),
);
};

今天我也看到了同样的情况。我还没有找到解决方案,所以如果你找到了,如果你能与我分享,我将不胜感激@AlfEaton@AlfEaton我贴出了答案。不确定它是否对你的情况有帮助。