【问题标题】:implement jwt client in react native在 react native 中实现 jwt 客户端
【发布时间】:2020-03-05 17:56:39
【问题描述】:

我想在 RN 中实现 jwt 客户端。获取新令牌可以正常工作,但是当令牌过期并且我想刷新令牌时它不起作用。这是我的 Get 函数代码:

let result = await instance
  .get(url)
  .then(({data}) => {
    if (data.error) {
      return {data: data.message, error: true, redirect: false};
    }
  return {data: data.data, error: false, redirect: false};
  })
  .catch(err => {
    if (err.response.status === 401) {
      async () => {
      let res = await this.RefreshToken().result;
      if (res) {
        return Get(url, withToken);
      } else {
        return {data: '', error: true, redirect: true};
      }
    };
  } else {
    return {data: 'Process Error', error: true, redirect: false};
  }
});

在上面的代码中,catch 中的“async()”部分不起作用。

这是我的 RefreshToken 函数:

export async function RefreshToken() {
  try {
    const ref_token = await SInfo.getItem('ref_token');
    let result = await instance
      .post(
        '/refresh_token/',
        qs.stringify({
          refresh: ref_token,
        }),
      )
      .then(({data}) => {
        if (!data.error) {
          SInfo.setItem('token', data.token.access, {});
          SInfo.setItem('ref_token', data.token.refresh, {});
          return {result: true, token: data.token.access};
        } else {
          return {result: false, token: ''};
        }
      })
      .catch(error => {
        return { result: false, token: '' };
      });
  }
}

我不知道是什么问题。

【问题讨论】:

  • 你只是定义了一个函数,没有给它一个名字。给它一个名字,然后在定义之后调用它。

标签: javascript react-native jwt refresh-token


【解决方案1】:

解决方案是这样的:

let result = await instance
      .get(url)
      .then(({data}) => {
        if (data.error) {
          return {data: data.message, error: true, redirect: false};
        }
        return {data: data.data, error: false, redirect: false};
      })
      .catch(err => {
        if (err.response.status === 401) {
          const refreshToken = async () => {
            let res = await this.RefreshToken().result;
            if (res) {
              return Get(url, withToken);
            } else {
              return {data: '', error: true, redirect: true};
            }
          };
          refreshToken();
        } else {
          return {data: 'Process Error', error: true, redirect: false};
        }
      });

或者我认为更好的解决方案是:

let result = await instance
      .get(url)
      .then(({data}) => {
        if (data.error) {
          return {data: data.message, error: true, redirect: false};
        }
        return {data: data.data, error: false, redirect: false};
      })
      .catch(async (err) => {
        if (err.response.status === 401) {
          let res = await this.RefreshToken().result;
          if (res) {
            return Get(url, withToken);
          } else {
            return {data: '', error: true, redirect: true};
          }
        } else {
          return {data: 'Process Error', error: true, redirect: false};
        }
      });

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-02-26
    • 2017-04-06
    • 2015-06-13
    • 2022-12-19
    • 2021-10-26
    • 1970-01-01
    • 2019-10-31
    相关资源
    最近更新 更多