【问题标题】:Redirect from localhost:8080 to localhost:3000 after Post requestPost 请求后从 localhost:8080 重定向到 localhost:3000
【发布时间】:2018-01-08 23:01:48
【问题描述】:

我正在尝试向我的后端提交表单提交请求,以通过 Facebook 进行用户身份验证,我被重定向到 facebook 并登录到 facebook。我已成功验证并返回了用户对象(在我的后端配置)。我的后端 Facebook 身份验证是按照 spring social tutorial 完成的,我还按照 Geoffroy 的春季社交登录教程:geowarin.GitHub dot io/social-login-with-spring.html。我的前端 React.Js 代码(在 localhost:3000 上运行)看起来像:

const auth_url = "/connect/facebook";
<form className="signin__form" action={auth_url} method="post">
    <input type="hidden" name="scope" value="user_friends" />
    <button type="submit" className="signin__form-btn">
    SIGN IN WITH FACEBOOK
    </button>
</form>

我的 package.json 代理 connect/facebook 对 localhost:8080 的响应,看起来像:

{
...
"proxy": {
    "/connect": {
      "target": "http://localhost:8080",
      "secure": false,
      "changeOrigin": true
    }
  },
...
}

我期望看到的:

在本地主机上:3000

{React view components}

我所看到的: 在本地主机上:8080

{
  user: info
}

我的问题是如何在后端重定向完成后返回 localhost:3000,我是否应该在后端创建另一个方法,以便我可以在前端发出 ajax 请求以获取用户信息而不是发送JSON 对象返回。 spring.social 握手完成后,我不确定如何重定向回 3000。

【问题讨论】:

    标签: spring facebook reactjs spring-mvc spring-social


    【解决方案1】:

    其实你可以改变你的控制器

    要在客户端重定向的标头

    @RequestMapping(value = "/auth_url", method = RequestMethod.POST)
    public void login(HttpServletResponse response) {
        response.setHeader("Location", "http://localhost:3000");
    }
    

    或从控制器返回重定向 URL

    @RequestMapping(value = "/auth_url", method = RequestMethod.POST)
    public ModelAndView login() {
            return new ModelAndView("redirect:http://localhost:3000");
    }
    

    或者,我建议通过 AJAX 提交表单并在不离开 localhost:3000 的情况下处理 onSuccess

    【讨论】:

    • 您好,感谢您的回复!我尝试使用 fetch 和 axios 库进行 AJAX 发布请求,但是当我被发送到 Facebook 以通过后端的身份验证控制器进行身份验证时,它们都不喜欢我返回的 302 重定向响应。有没有办法等待重定向完成然后收到响应?
    猜你喜欢
    • 2018-08-07
    • 1970-01-01
    • 1970-01-01
    • 2019-07-07
    • 1970-01-01
    • 2019-08-24
    • 1970-01-01
    • 2019-06-04
    • 1970-01-01
    相关资源
    最近更新 更多