【问题标题】:automaticaaly do refresh token if its expired如果令牌过期,自动刷新令牌
【发布时间】:2021-02-17 19:17:51
【问题描述】:

我有这个代码

    <cfscript>
    public struct function CreateToken() {
          var result = '';
          var apiKeys = {
            'appKey' : variables.username,
            'appSecret': variables.password
          };
          httpService = new http(method = "POST", url = "https://wesa.com/v1/tokens/create");
          httpService.addParam(type = "header", name="Content-Type", value = "application/json");
          httpService.addParam(type = "body", value = "#parseBody(apiKeys)#");
          result = httpService.send().getprefix();
          if(result.statuscode == '200') {
            resultDeserialized = deserializeJSON(result.fileContent);
          }
          return resultDeserialized;
        }
    
        public struct function RefreshToken(required string token) {
          var apiStruct = [:];
          apiStruct['refreshToken'] = arguments.token;
          httpService = new http(method = "POST", url = "https://wesa.com/v1/tokens/refresh");
          httpService.addParam(type = "header", name="Content-Type", value = "application/json");
          httpService.addParam(type = "body", value = "#parseBody(apiStruct)#");
          result = httpService.send().getprefix();
          if(result.statuscode == '200') {
            resultDeserialized = deserializeJSON(result.fileContent);
          }
          return resultDeserialized;
        }
    
    </cfscript>

但我想了解如何自动调用刷新令牌,因为如果令牌处于活动状态且已过期,它会给我一个 401 状态。

我没有得到底层行为,如何自动使用它来刷新它,然后调用 API 进行调用。

同理,过期时间是8900秒,所以甚至不确定刷新令牌在时间过期后是否可用或检查是否过期,只需调用刷新令牌

我只是需要一些关于如何使用它的指导

【问题讨论】:

    标签: coldfusion lucee


    【解决方案1】:

    您可以构建一个拦截器,在响应状态为 401 时刷新令牌。

    我在 react js 中做过这样的

    axiosInstance.interceptors.response.use((response) => {
        return response
    }, error => {
        const originalRequest = error.config;
    
        if (error.response.status === 401 && !originalRequest._retry) {
            originalRequest._retry = true;
            const refreshToken: string = localStorage.getItem('refreshToken') || '';
            const user: string = localStorage.getItem('user') || '';
            let email: string;
            if (refreshToken.length === 0 && user.length === 0) {
                return Promise.reject(error);
            }
            email = JSON.parse(user).email;
            return axiosInstance.post(refreshTokenUrl,
                {
                    "email": `${email}`,
                    "refreshToken": `${refreshToken}`
                }).then(res => {
                if (res.status === 200) {
                    localStorage.setItem('token', res.data.token)
                    const accessToken = localStorage.getItem("token");
                    originalRequest.headers.authorization = 'Bearer ' + accessToken;
                    return axios(originalRequest)
                }
            })
        }
    });
    

    或者您可以设置在令牌到期之前刷新的计时器

    【讨论】:

    • 不幸的是,我没有使用 react,但是我调用我的 API 的方式是: new myAPI.Senddata(form) -- 现在 send 内部调用 CreateToken 并设置标题 Authorization 和 if令牌已过期,它应该刷新并将该令牌附加到 heazder 以便可以成功调用
    • 抱歉,我帮不上忙。我只知道反应。我只是想说你可以使用拦截器来刷新令牌。
    猜你喜欢
    • 2016-09-10
    • 2021-10-22
    • 2020-11-11
    • 2014-09-18
    • 2018-06-05
    • 2021-08-25
    • 2017-10-19
    • 2015-05-10
    • 1970-01-01
    相关资源
    最近更新 更多