最佳做法-使用刷新令牌快速访问API

问题描述

我正在使用Fastify访问使用OAuth2的Sage API。访问令牌仅持续300秒,因此我经常需要刷新令牌。我不确定刷新令牌后如何返回到原始端点函数。我是否应该使用“ prehandler”选项至少执行步骤1并获取存储在数据库中的令牌?

fastify.route({
        method: 'GET',url: '/api/sage/salebyref/:ref',handler: async (request,reply) => {
            // 1. get credientials to make api call
            let credentials = await getCredentialsByUser()
            let authStr = 'Bearer '.concat(credentials.dataValues.oauth_token)
            try {
                // 2. make api call
                let sageInvoice = await getSalesInvoicesByRef(authStr,request.params.ref)
                return sageInvoice.data
            } catch (error) {
                if (error.response.status === 401) {
                    try {
                        // 3. if token invalid,refresh token
                        await refreshToken(credentials.dataValues.oauth_refresh_token,credentials.dataValues.userid)  
                        // 4. somehow do it again
                    } catch (error) {
                        console.log(error)
                        throw error
                    }
                    
                } else {
                    console.log('not 401',error.response)
                }
                throw error
            }
        }
    })

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...