首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在NextJS中刷新用户服务器端?

在NextJS中刷新用户服务器端?
EN

Stack Overflow用户
提问于 2021-06-20 16:03:57
回答 1查看 406关注 0票数 0

我试图在NextJS中刷新服务器上的用户令牌,目前我在cookie中设置了令牌,我可以这样访问:

代码语言:javascript
复制
export async function getServerSideProps(ctx) {
    const cookies = nookies.get(ctx);
    try {
        const client = useClient(cookies.token);
    // etc
    }
}

不幸的是,如果令牌已过期,这将失败,因为令牌已过期错误。

我确实可以访问刷新令牌,但不确定如何使用它,firebase.auth().currentUser也未在getServersideProps中定义

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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请求:

代码语言:javascript
复制
https://securetoken.googleapis.com/v1/token?key=FirebasePublicAPIKey

API密钥可在Firebase Config中获得。这个POST请求的主体似乎是URL编码的,并且有grant_typerefresh_token字段。

下面是一个相同的cURL请求:

代码语言:javascript
复制
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令牌本身。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68057696

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档