Axios不发送授权标头 - ReactJS

时间:2017-11-25 15:52:50

标签: reactjs spring-boot axios

我在axios GET请求中设置授权标头时遇到问题。 我做了很多研究,但没有找到解决方案。此外,我检查了CORS设置,它应该没问题,请求正在邮递员或提前休息客户端,所以我不相信服务器端的问题。

我的axios请求功能

export function getUserInfo (userId) {
  return function (dispatch) {
   axios.get(`${ROOT_URL}/user/${userId}`, helperMethods.authorizedHeader())
    .then(response => {
      dispatch({type: USER_INFO, payload: response.data.message});
    })
    .catch(error => {
      console.log('something went wrong: ', error);
    });
  };
}

Helper方法(返回有效对象,我调试了它)

export function authorizedHeader () {
  let token = sessionStorage.getItem(TOKEN);
  if (!token) {
    token = localStorage.getItem(TOKEN);
  }
  return {
    headers: {
    'Accept': 'application/json',
    'Authorization': `${token}`
  }
 };
}

和CORS设置:

@Bean
public CorsFilter corsFilter() {
    UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
    CorsConfiguration config = new CorsConfiguration();
    config.setAllowCredentials(true);
    config.addAllowedOrigin("*");
    config.addAllowedHeader("*");
    config.addAllowedMethod("*");
    source.registerCorsConfiguration("/**", config);
    return new CorsFilter(source);
}

如果您有任何建议,请与我分享。

谢谢

1 个答案:

答案 0 :(得分:0)

最后,我发现了问题。问题在于我在服务器端的CORS配置。当请求被触发时,它首先进入弹簧CORS过滤器,这是拒绝请求,并且它从不触发我的CORS过滤器。 所以我必须设置触发顺序,如下所示:

FilterRegistrationBean bean = new FilterRegistrationBean(new CorsFilter(source));
    bean.setOrder(-110);

这是完整更新的CORS配置:

@Bean
public FilterRegistrationBean platformCorsFilter() {
    UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();

    CorsConfiguration configAutenticacao = new CorsConfiguration();
    configAutenticacao.setAllowCredentials(true);
    configAutenticacao.addAllowedOrigin("*");
    configAutenticacao.addAllowedHeader("Authorization");
    configAutenticacao.addAllowedHeader("Content-Type");
    configAutenticacao.addAllowedHeader("Accept");
    configAutenticacao.addAllowedMethod("POST");
    configAutenticacao.addAllowedMethod("GET");
    configAutenticacao.addAllowedMethod("DELETE");
    configAutenticacao.addAllowedMethod("PUT");
    configAutenticacao.addAllowedMethod("OPTIONS");
    configAutenticacao.setMaxAge(3600L);
    source.registerCorsConfiguration("/**", configAutenticacao);

    FilterRegistrationBean bean = new FilterRegistrationBean(new CorsFilter(source));
    bean.setOrder(-110);
    return bean;
}