我试图在NextJS中刷新服务器上的用户令牌,目前我在cookie中设置了令牌,我可以这样访问:
export async function getServerSideProps(ctx) {
const cookies = nookies.get(ctx);
try {
const client = useClient(cookies.token);
// etc
}
}不幸的是,如果令牌已过期,这将失败,因为令牌已过期错误。
我确实可以访问刷新令牌,但不确定如何使用它,firebase.auth().currentUser也未在getServersideProps中定义
发布于 2021-06-20 16:23:35
我在使用NuxtJS时遇到了类似的问题,最简单的方法是将用户重定向到另一个页面,在那里您可以在客户端获得一个新的Firebase ID令牌,然后刷新cookie。例如,您可以重定向到类似于https://domain.tld/auth/refresh?redirect_uri=/dashboard的页面。查询参数redirect_uri告诉用户在刷新令牌后被重定向的位置和必须重定向的位置。
如果要避免重定向,则必须将“刷新令牌”存储在服务器端。我不知道这有多安全,但不要在cookie中存储刷新令牌。但是,如果您想知道如何使用刷新令牌获得新的Firebase ID令牌,则可以向此URL发出POST请求:
https://securetoken.googleapis.com/v1/token?key=FirebasePublicAPIKeyAPI密钥可在Firebase Config中获得。这个POST请求的主体似乎是URL编码的,并且有grant_type和refresh_token字段。
下面是一个相同的cURL请求:
curl "https://securetoken.googleapis.com/v1/token?key=firebaseAPIKey" \
-H 'Content-Type: application/x-www-form-urlencoded' \
-X POST \
-F 'grant_type=refresh_token' \
-F 'refresh_token=firebaseRefreshToken' 我只是使用Chrome DevTools来检查令牌是如何刷新的,并发现了这一点。
第一种方法听起来更安全,我个人使用它来存储服务器或cookie中某个地方的刷新令牌。实际上,我在cookie中使用来自服务器的自定义JWT令牌,而不是Firebase ID令牌本身。
https://stackoverflow.com/questions/68057696
复制相似问题