Spring Boot RTKFetchBaseQuery代理用户|withCredentials:true不适用于某些端点

ugmeyewa  于 2023-03-18  发布在  Spring
关注(0)|答案(1)|浏览(178)

我用这样的axio配置了我的basesquery。

const baseQuery =
  (
    { baseUrl }: { baseUrl: string } = {
      baseUrl: "http://localhost:8080/api/v1",
    }
  ): BaseQueryFn<
    {
      url: string;
      method: AxiosRequestConfig["method"];
      data?: AxiosRequestConfig["data"];
      params?: AxiosRequestConfig["params"];
    },
    unknown,
    unknown
  > =>
  async ({ url, method, data, params }) => {
    try {
      debugger;
      const result = await axios({
        url: baseUrl + url,
        method,
        data,
        params,
        withCredentials: true,
      });
      return { data: result.data };
    } catch (axiosError) {
      let err = axiosError as AxiosError;
      console.log("got this er", err);
      return {
        error: {
          status: err.response?.status,
          data: err.response?.data || err.message,
        },
      };
    }
  };

这是我的终点

export const questionApiSlice = apiSlice.injectEndpoints({
  endpoints: (builder) => ({
    sendAnswer: builder.mutation({
      query: (answerDetails) => ({
        url: "/question/sendAnswer",
        method: "POST",
        data: { ...answerDetails },
      }),
    }),
    getNextQuestion: builder.mutation({
      query: (credentials) => ({
        url: "/question/next",
        method: "GET",
      }),
    }),
  }),
});

由于某种原因,sendAnswer的变化不包括请求的凭据。我该如何解决这个问题。我一直在尝试在injectEndpoints中编写自己的queryFn,但没有更好的效果。感谢您的宝贵时间

eni9jsuy

eni9jsuy1#

原来我没有正确配置我的SpringSecurityConfig,我已经为cors创建了一个额外的bean,但是它仍然不能正常工作。

@Bean
    public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
        http
                .csrf()
                .disable()
                .authorizeHttpRequests()
                .requestMatchers("/api/v1/auth/register","/api/v1/auth/login")
                .permitAll()
                .anyRequest()
                .authenticated()
                .and()
                .sessionManagement()
                .sessionCreationPolicy(SessionCreationPolicy.STATELESS)
                .and()
                .authenticationProvider(authenticationProvider)
                .addFilterBefore(jwtAuthFilter, UsernamePasswordAuthenticationFilter.class)
                .logout()
                .logoutUrl("/api/v1/auth/logout")
                .addLogoutHandler(logoutHandler)
                .logoutSuccessHandler((request, response, authentication) -> SecurityContextHolder.clearContext())
        ;

        http.cors();

        return http.build();
    }

在我添加了http.cors()之后,一切都很好,花了3-4个小时在这上面,非常可爱😍

相关问题