我想知道如何在 Firebase 访问令牌过期时刷新它。我需要用于 api 身份验证的访问令牌。我尝试在网上找到它,但似乎找不到任何带有 next-auth 和 firebase 的内容。
这就是我现在所拥有的。我能够获取访问令牌,只是在过期时无法刷新。所以一段时间后我收到 api 身份验证错误。
import { auth } from "@/config/firebaseApp";
import { signInWithEmailAndPassword } from "firebase/auth";
import { AuthOptions } from "next-auth";
import NextAuth from "next-auth/next";
import CredentialsProvider from "next-auth/providers/credentials";
const authOptions: AuthOptions = {
pages: {
signIn: "/signIn",
},
session: {
strategy: "jwt",
},
providers: [
CredentialsProvider({
type: "credentials",
credentials: {},
authorize: async (credentials): Promise<any> => {
return await signInWithEmailAndPassword(
auth,
(credentials as any).email || "",
(credentials as any).password || ""
)
.then(async (userCredentials) => {
const dummy = {
role: "admin",
};
if (userCredentials.user) {
return {
...userCredentials.user,
role: dummy.role || "user",
access_token: await userCredentials.user.getIdToken(),
};
}
return null;
})
.catch((err) => {
console.log(err.message);
});
},
}),
],
callbacks: {
async jwt({ token, user }) {
if (user) {
token.role = user.role;
token.access_token = user.access_token;
}
return token;
},
async session({ session, token }) {
if (session.user) {
session.user.role = token.role;
}
return session;
},
},
};
const handler = NextAuth(authOptions);
export { handler as GET, handler as POST };
我也是初学者,所以如果我在这里做错了什么,请纠正我。
firebaser在这里
Firebase 身份验证 SDK 在 ID 令牌过期前约 5 分钟自动刷新 ID 令牌,并且
getIdToken()
始终为您提供最新的令牌。由于 Firebase ID 令牌的有效期为一小时,因此您从 getIdToken
获取的令牌的有效期应至少为 5 分钟,最长为 60 分钟。
您可以将此令牌传递到您自己的后端以在那里验证它。您还可以在那里缓存令牌,但是您不应该将解码后的令牌与用户/UID相关联。
许多 Firebase 自己的无连接服务采用的方法: