react native中的实现jwt客户端

问题描述 投票:0回答:1

我想在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个回答
0
投票

解决方案是这样的:

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};
        }
      });
© www.soinside.com 2019 - 2024. All rights reserved.