账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    spring social中社交账号的解绑死循环
    35
    0

    看了一些网上的教程(教程地址:https://juejin.im/post/5a7ae6... ), spring social提供了一个ConnectController实现了绑定与解绑

    其中前端发送 /connect/{providerId}(DELETE请求) 就能解除相关绑定

    然后说在调用该请求之后会返回 connect/{providerId}Connect 的这样一个视图, 但这个视图需要自己扩展实现

    但我自己编写发现确实能删除数据库中的绑定, 但不会跳转到connect/{providerId}Connect, 而是不断的死循环, 最后前端返回ERR_TOO_MANY_REDIRECTS, 查看ConnectController的源码

        @RequestMapping(value="/{providerId}", method=RequestMethod.DELETE)
        public RedirectView removeConnections(@PathVariable String providerId, NativeWebRequest request) {
            ConnectionFactory<?> connectionFactory = connectionFactoryLocator.getConnectionFactory(providerId);
            preDisconnect(connectionFactory, request);
            connectionRepository.removeConnections(providerId);
            postDisconnect(connectionFactory, request);
            return connectionStatusRedirect(providerId, request);
        }
    
        protected RedirectView connectionStatusRedirect(String providerId, NativeWebRequest request) {
            HttpServletRequest servletRequest = request.getNativeRequest(HttpServletRequest.class);
            String path = "/connect/" + providerId + getPathExtension(servletRequest);
            if (prependServletPath(servletRequest)) {
                path = servletRequest.getServletPath() + path;
            }
            return new RedirectView(path, true);
        }
    
        private String getPathExtension(HttpServletRequest request) {
            String fileName = WebUtils.extractFullFilenameFromUrlPath(request.getRequestURI());        
            String extension = StringUtils.getFilenameExtension(fileName);
            return extension != null ? "." + extension : "";
        }

    上面的源码并没有将/connect/{providerId}转换成connect/{providerId}Connect啊, 最后的return connectionStatusRedirect(providerId, request) 不还是会回到removeConnections中吗?

    1
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • 我美跟我走 普通会员 1楼

      在Spring Social中,如果你的社交账号被解绑后,你的应用程序将无法正确地从Spring Social中获取用户信息。这可能是由于Spring Social使用了Spring Boot的身份验证机制,当用户解绑账号时,Spring Social可能会试图连接到该账号的Spring Boot应用程序。

      要解决这个问题,你需要在应用程序中确保每个用户都有一个唯一的Spring Social用户。你可以在Spring Boot应用程序中创建一个用户类,并使用Spring Social提供的用户认证API来验证用户。

      同时,你还需要确保Spring Social在解绑账号后能够正确地更新其用户的用户信息。你可以使用Spring Social的用户管理API来更新用户的用户信息。

      如果你在使用Spring Social的过程中遇到任何问题,建议你查阅Spring Social的文档,或者联系Spring Social的开发者以获取更多帮助。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部