是否可以使用路徑變數在 React Admin 中指定資源名稱?
問題
當用戶進行身份驗證時,如果是管理員,應該會看到電子郵件帳戶串列。單擊它重定向到路徑的電子郵件experts/${email}/requests。
要映射此路徑,我需要為每封電子郵件定義一個新資源。這樣做的問題是我必須在身份驗證之前進行。
我想要的是資源名稱的路徑變數。例如experts/:email/requests。
當前實作的示例
function App() {
const [emails, setEmails] = useState<string[]>([]);
useEffect(() => {
(async () => {
const experts = await firebase.firestore().collection("experts").get();
const docIds: string[] = experts.docs.map((doc) => doc.id);
setEmails(docIds);
})();
}, []);
return (
<Admin
authProvider={authProvider}
dataProvider={dataProvider}
>
{(props) => {
if (props.admin) {
return [
emails.map((email) => {
return (
<Resource
key={email}
options={{ label: `${email}` }}
name={`experts/${email}/requests`}
list={RequestList}
edit={RequestEdit}
/>
);
}),
<Resource name={`experts`} list={ExpertList} />,
];
} else {
return [
<Resource
options={{ label: `${props.email}` }}
name={`experts/${props.email}/requests`}
list={RequestList}
edit={RequestEdit}
/>,
];
}
}}
</Admin>
);
}
uj5u.com熱心網友回復:
我決定覆寫 Firebase authProvider 的登錄,而不是路徑變數(React Admin 不可能),以便在用戶登錄后立即獲取資料。
超時是必需的,因為在第一次渲染后可能會設定 localStorage。
let authProvider = FirebaseAuthProvider(firebaseConfig, options);
const login = authProvider.login;
authProvider = {
...authProvider,
login: async (params) => {
try {
const user = await login(params);
const experts = await firebase.firestore().collection("experts").get();
const docIds: string[] = experts.docs.map((doc) => doc.id);
localStorage.setItem("emails", JSON.stringify(docIds));
await timeout(300);
return user;
} catch (error) {
console.error("error", error);
}
},
};
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/369546.html
上一篇:需要有關重繪令牌機制的幫助
