![](/img/trans.png)
[英]connect firebase authentication with realtime database from firebase
[英]How do you pass authentication from an RTK Query to firebase functions to access realtime database?
在前端,一切都使用 firebase 登錄 api 進行正確驗證,並且 auth 更改的偵聽器獲取令牌和用戶信息以傳遞到后端。
這是 RTK 查詢中使用的一般字段:
reducerPath: "api",
baseQuery: fetchBaseQuery({
baseUrl: "https://us-central1.cloudfunctions.net/api",
mode: "cors",
prepareHeaders: (headers) => {
headers.set("Access-Control-Allow-Methods", "GET,PUT,POST,DELETE");
headers.set("Access-Control-Allow-Origin", "*");
headers.set("Access-Control-Allow-Headers", "Content-Type");
const authToken = localStorage.getItem("AuthToken");
if (authToken) headers.set("authorization", authToken);
return headers;
},
}),
endpoints: (builder) => ({
getWorkouts: builder.query<GetWorkoutList, string>({
query: (userId) => ({
url: `/workouts/${userId}`,
}),
}),
---rest of endpoints---
這是檢查成功的前端身份驗證更改:
useEffect(() => {
const unsubscribe = onAuthStateChanged(auth, async (userInfo) => {
setUser(userInfo);
if (userInfo === null) {
localStorage.clear();
} else {
const token = await userInfo.getIdToken(true);
localStorage.setItem("AuthToken", `Bearer ${token}`);
}
});
return unsubscribe;
}, [user]);
在 firebase 功能中,它使用管理員級別從前端驗證令牌,而后端的 rest 使用普通用戶權限。
const decodedIdToken = await adminApp.auth().verifyIdToken(idToken);
問題是使用管理員級別繞過了安全規則,實際上並沒有為用戶訪問數據庫提供身份驗證。
向實時數據庫請求身份驗證 object 以成功通過 firebase 規則的實際步驟是什么?
"users":{
"$userId":{
".write": "$userId == auth.uid",
".read": "$userId == auth.uid",
},
},
(身份驗證 == 空)
來自管理員 SDK 的請求通常是完全可信的並且繞過安全規則。
對於實時數據庫,雖然您可以在初始化 Admin SDK 時傳遞databaseAuthVariableOverride
,並傳遞您自己的 UID,如有關使用有限權限進行身份驗證的文檔中所示。 雖然我自己從未對此進行過測試,但我認為您也可以傳遞其他聲明 - 因為您傳遞的信息只是成為規則中的auth
變量。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.