使用 React Native 处理会话 Cookie

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

我正在尝试使用 HttpSession 属性在我的应用程序中实现身份验证机制。 用户登录后,将设置 userContext 属性,我希望它在每次后续调用后端时都作为函数参数。 这是我的登录端点代码:

   @RequestMapping(value = "/login")
    @CrossOrigin(origins="http://localhost:19006", allowCredentials = "true")
    @Override
    public Response login(@RequestBody LoginRequest loginRequest, HttpSession session){
        System.out.println("login");
        // TODO: Maybe implement Service Layer User object
        Response<User> response = facade.login(loginRequest);
        if(!response.iswas_exception()) {
            var userContext = new UserContext(response.getValue());
            session.setAttribute(USER_CONTEXT_ATTRIBUTE_NAME, userContext);
        }
        return response;
    }

这是另一个列出系统所有用户的函数的代码:

    @RequestMapping(value = "/view_users")
    @CrossOrigin(origins="http://localhost:19006", allowCredentials = "true")
    @Override
    public Response view_users(@SessionAttribute("userContext") UserContext userContext) {
        return facade.view_users(userContext);
    }

我使用 axios 来发送请求,我通过以下方式创建实例:

const instance = axios.create({
    withCredentials : true
});

我遇到的问题是,当我在登录后调用后端时,收到 400“Bad Request”响应: The Response I receive

如果我在此处的 view_users 选项卡上单击鼠标: the network tab

然后我确实进入了端点函数,因为我在那里有一个断点,我看到我到达那里并且我看到参数被正确传递。但是当我从代码执行调用时它不起作用,这是调用端点的代码:

    view_users(){
        alert("in view users");
        return axios.get(VIEW_USER_PATH)
                .then(res => {
                    console.log(res);
                    return res.data;
                    // return new Response(res.data);
                })
                .catch(res => Response.create(CATCH,true, CONNECTION_ERROR ));
        
    }

一开始我在@CrossOrigin 中没有 origin 和 allowCredentials 标头,所以我添加了它们,但它仍然不起作用。 让我烦恼的是,当我双击网络选项卡中的 view_users 选项卡时,它会重新启动请求并且它可以工作。那么为什么它在代码的第一次尝试中不起作用?

react-native axios session-cookies httpsession
© www.soinside.com 2019 - 2024. All rights reserved.