春季社交登录与linkedin

时间:2014-09-29 10:10:45

标签: spring linkedin spring-social

我已经通过facebook,twitter和linkedin连接工厂配置了spring social for login。 Facebook和Twitter的工作正常,但在使用linkedin登录后,ProviderSignInUtils.getConnection(request)会给出null连接。

 public void addConnectionFactories(ConnectionFactoryConfigurer cfConfig, Environment env) {
       cfConfig.addConnectionFactory(new TwitterConnectionFactory(
                env.getProperty("twitter.consumer.key"),
                env.getProperty("twitter.consumer.secret")
        ));

            cfConfig.addConnectionFactory(new FacebookConnectionFactory(
                    env.getProperty("facebook.app.id"),
                    env.getProperty("facebook.app.secret")

                    ));


        cfConfig.addConnectionFactory(new LinkedInConnectionFactory(
                env.getProperty("linkedin.consumerKey"),
                env.getProperty("linkedin.consumerSecret")));


       }

我的注册码在这里。

@RequestMapping(value = "/user/register", method = RequestMethod.GET)
    public String showRegistrationForm(WebRequest request, Model model) {
        LOGGER.debug("Rendering registration page.");

        Connection<?> connection = ProviderSignInUtils.getConnection(request);
        RegistrationForm registration = createRegistrationDTO(connection);
        try {
            User uesr = service.registerNewUserAccount(registration);
               SecurityUtil.logInUser(uesr);
        }
        catch (DuplicateEmailException ex) {
            LOGGER.debug("An email address: {} exists.", registration.getEmail());
        }


        ProviderSignInUtils.handlePostSignUp(registration.getEmail(), request);

        return "redirect:/loginSuccess";
    }

private RegistrationForm createRegistrationDTO(Connection<?> connection) {
        RegistrationForm dto = new RegistrationForm();

        if (connection != null) {
            UserProfile socialMediaProfile = connection.fetchUserProfile();
            if(socialMediaProfile.getEmail() == null ){
                 dto.setEmail(connection.getDisplayName());
            }else{
                 dto.setEmail(socialMediaProfile.getEmail());
            }           
            dto.setFirstName(socialMediaProfile.getFirstName());
            dto.setLastName(socialMediaProfile.getLastName());

            ConnectionKey providerKey = connection.getKey();
            dto.setSignInProvider(SocialMediaService.valueOf(providerKey.getProviderId().toUpperCase()));
        }

        return dto;
    }

的Login.jsp

<form method="POST" action="<c:url value="/auth/linkedin"/>">                           
                            <input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}" />
                            <input type="hidden" name="redirect_uri" value="http://localhost:8080/spring-social/user/register"> 
                                <input type="hidden" name="scope"
                                    value="r_emailaddress" />
                                <button class="btn btn-linkedin" type="submit"><i class="fa fa-linkedin"></i> | Connect with LinkedIn<i class="fa fa-linkedin"></i></button>


 </form>

这里,问题是使用l​​inkedin来登录dosent因为连接对象为null而提供任何用户信息。 任何人都可以帮助我。

1 个答案:

答案 0 :(得分:0)

redirect_url不应该是localhost。也使uri相对而不是绝对。 我做的是使用我的虚拟博客url之一,使用此url在localhost上设置别名并修改主机文件。然后我使用此URL访问该应用程序。 对于linkedIn,redirect_url必须是在应用程序中注册的网址之一。