相关疑难解决方法(0)

403 Forbidden vs 401 Unauthorized HTTP响应

对于存在的网页,但对于没有足够权限的用户(他们未登录或不属于正确的用户组),要提供的正确HTTP响应是什么?401?403?别的什么?到目前为止,我对每个人的看法都不太清楚.哪些用例适合每个响应?

http-status-codes http-response-codes http-headers http-status-code-403 http-status-code-401

2544
推荐指数
18
解决办法
97万
查看次数

Axios拦截器重试原始请求并访问原始承诺

如果访问令牌过期,我有一个拦截器来捕获401错误.如果它到期,它会尝试刷新令牌以获取新的访问令牌.如果在此期间进行了任何其他呼叫,则它们将排队等待,直到验证访问令牌.

这一切都很好.但是,当使用Axios(originalRequest)处理队列时,不会调用最初附加的promise.请参阅下面的示例.

工作拦截器代码:

Axios.interceptors.response.use(
  response => response,
  (error) => {
    const status = error.response ? error.response.status : null
    const originalRequest = error.config

    if (status === 401) {
      if (!store.state.auth.isRefreshing) {
        store.dispatch('auth/refresh')
      }

      const retryOrigReq = store.dispatch('auth/subscribe', token => {
        originalRequest.headers['Authorization'] = 'Bearer ' + token
        Axios(originalRequest)
      })

      return retryOrigReq
    } else {
      return Promise.reject(error)
    }
  }
)
Run Code Online (Sandbox Code Playgroud)

刷新方法(使用刷新令牌获取新的访问令牌)

refresh ({ commit }) {
  commit(types.REFRESHING, true)
  Vue.$http.post('/login/refresh', {
    refresh_token: store.getters['auth/refreshToken']
  }).then(response => {
    if (response.status === 401) {
      store.dispatch('auth/reset')
      store.dispatch('app/error', 'You …
Run Code Online (Sandbox Code Playgroud)

javascript promise vue.js axios vuejs2

18
推荐指数
3
解决办法
2万
查看次数

Axios请求拦截器等待ajax调用完成

我有一个用于axios调用的请求拦截器.它检查我的jwt令牌并在必要时调用刷新.

axios.interceptors.request.use((config) =>{

    const state = store.getState(); // get renewed state
    const time = Math.floor( new Date().getTime() / 1000 );

    if( 
        ! state.app.jwtRefreshOnRequest 
        && time >= state.jwt.expires - 120
        && state.jwt.refresh_before > time
    ){ // expiring in 2 min. refresh    

        //dispatch({type: 'JWT_REFRESH_REQUEST'});
        axios.get( API_BASE_URL + '/auth/refresh')
            .then(function(response){
                // dispatch({type: 'JWT_REFRESH_SUCCESS', payload: response.data});
                axios(config).then(resolve, reject);
            })
            .catch(function(err){               
                reject(err);
        });

    }       

    return config;
}); 
Run Code Online (Sandbox Code Playgroud)

此代码正确调用刷新并保存新令牌,但原始调用在拦截器请求完成之前不会成立,因此使用了过期令牌.

所以,我想我需要从拦截器进行同步调用.

javascript ajax axios

7
推荐指数
1
解决办法
8600
查看次数

使用 axios.interceptors 获取新令牌

当令牌过期时,我想根据refresh_token 获取一个新令牌。我已经读到这可以通过axios.interceptors.

请检查是否:

  • 我是否正确配置了 axios.interceptors?
  • 我是否将它放在正确的位置,即在Items班级上方。
  • axios.interceptors.response分配给interceptor变量。我应该如何处理这个变量?

除了`axios.interceptors',我还需要一个新的令牌。令牌的有效期为 24 小时。

  • 我是否必须等待 24 小时才能测试它是否有效,或者是否有可能以不同的方式更快?
  • 我应该把“client_id”、“secret_id”、“grant_type”放在哪里?

代码在这里:https : //stackblitz.com/edit/react-pkea41

import axios from 'axios';

axios.defaults.baseURL = localStorage.getItem('domain');

const interceptor = axios.interceptors.response.use(
  response => response,
  error => {
      // Reject promise if usual error
      if (errorResponse.status !== 401) {
          return Promise.reject(error);
      }

      /* 
       * When response code is 401, try to refresh the token.
       * Eject the interceptor so it doesn't loop in case
       * token …
Run Code Online (Sandbox Code Playgroud)

javascript oauth reactjs axios

6
推荐指数
1
解决办法
1万
查看次数