那边的开发朋友们大家好。
我在 Next(TypeScript) 中遇到 Firebase 身份验证问题。
我想用中间件来控制权限访问之类的东西。
但是,当我使用
auth.currentUser
时,它总是为空,所以,我将 useContext
与 AuthContext.Provider
和 useAuth
挂钩使用。但是,在中间件中我不能使用它..
那么如何将 Firebase-well 与中间件结合使用?
这是我的代码库和我想要的。
import { NextResponse } from 'next/server'
import type { NextRequest } from 'next/server'
import { auth } from './utils/firebase/config';
const protectedRoutes = ["/article/add"];
export async function middleware(request: NextRequest) {
const currentUser = auth.currentUser;
console.log(`currentUser is : ${currentUser}`);
const user = null;
if (user == null && protectedRoutes.includes(request.nextUrl.pathname)) {
const absoluteURL = new URL("/login", request.nextUrl.origin);
return NextResponse.redirect(absoluteURL.toString());
}
}
export const config = {
matcher: [
/*
* Match all request paths except for the ones starting with:
* - _next/static (static files)
* - _next/image (image optimization files)
* - favicon.ico (favicon file)
* Feel free to modify this pattern to include more paths.
*/
'/((?!_next/static|_next/image|favicon.ico|.*\\.(?:svg|png|jpg|jpeg|gif|webp)$).*)',
],
}
请告诉我您的意见。 🙏
我其实也遇到了同样的问题,最后我把登录的
getIdToken()
结果存储到了cookie中。
通过cookie中的访问令牌(JWT形式),您可以在服务器操作、API处理程序和中间件中访问它。为了验证它,一个简单的 JWT 解码器包可以解码 JWT 并相应地验证
iat
/ exp
。