嗨,我是下一個 js 的新手,對使用 firebase 身份驗證客戶端和服務器端有一些疑問。我的專案中同時設定了 firebase admin 和 firebase client sdks。我有一個注冊頁面用戶路由。他們填寫姓名電子郵件和密碼。當用戶在注冊頁面上提交表單時,我正在使用客戶端通過電子郵件和密碼createUserWithEmailAndPassword進行身份驗證。
問題:[1]
我想在創建用戶時將用戶名和 uid 的身份驗證回應保存到 firestore db。我應該在身份驗證回應發生時在同一個提交處理程式中執行此操作嗎?
const onSignup = async ({ email, password }: Tfields) => {
try {
const response = await auth.signup(email, password);
/ *** DO I save to firestore DB here ? **/
// route to authenticated page
router.push("/account");
} catch (error) {
});
}
};
[2] 如果從上面的處理程式呼叫 firestore,我應該直接使用 firebase 客戶端 sdk 呼叫 firestore,還是應該在 nextjs 中創建一個名為createDBUser的 api 路由并從處理程式呼叫 api。使用 api 而不是直接使用客戶端 sdk 連接到 Firestore 會不會更安全?
[3] 示例授權路由,例如/account這本質上是構建時的 SSG。起初不會在頁面上顯示任何內容,這對 SEO 不是很友好。在 firebase 客戶端檢查發生之前,首先只能查看標頭 SEO 組件嗎?
const Account = () => {
const [user, setUser] = useState<any>(null);
const handleUser = (user) => {
setuser(user)
}
useEffect(() => {
const unsubscribe = onIdTokenChanged(getAuth(), handleUser);
return () => unsubscribe();
}, []);
return (
<div>
<Head>
<title>Authorized User page</title>
<meta
name="description"
content="this is john doe's page with all his account pages"
/>
</Head>
{user && <div>
<div>This is a authenticated account page</div>
</div> }
</div>
);
};
export default Account;
或者我是否應該在帳戶頁面中使用 getServerSideProps 來檢查用戶是否已登錄,而不是在 useEffect 中執行此操作。在將其提供給用戶之前,這不會在服務器上呈現所有內容嗎?此外,我將能夠在 seo 標頭中注入用戶名,因為它將事先在服務器上呈現。
uj5u.com熱心網友回復:
直接或通過服務器與 Firestore 互動取決于您的情況,并且意見可能會有所不同。但是是否值得添加另一個 API 路由,驗證用戶令牌,然后在可以直接使用安全規則保護資料的情況下將資料添加到 Firestore ?是的,您可以在createUserWithEmailAndPassword()創建用戶后立即將資料添加到 Firestore。
如果您需要對更新檔案或任何操作進行任何速率限制,則通過 API 路由 Firestore 請求將很有用。
對于服務器端呈現的 Web 應用程式,我建議使用會話 cookie,以便您可以在呈現之前對用戶進行身份驗證。在這里,您必須使用 Admin SDK 驗證 cookie 并獲取資料以在頁面呈現之前顯示。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/425737.html
標籤:javascript 火力基地 谷歌云火库 下一个.js 火力基地管理员
下一篇:引數型別“Future<QuerySnapshot<Map<String,dynamic>>>”不能分配給引數型別“Future<DocumentSnapsh
