2014-09-29 96 views
1

我已配置春季社交登录facebook,twitter和linkedin连接工厂。 Facebook和Twitter工作正常,但通过linkedin登录后,ProviderSignInUtils.getConnection(request)给出了空连接。春季社交登录与linkedin

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> 

在这里,问题与LinkedIn dosent登录提供,因为连接对象的任何用户信息为空。 任何人都可以帮助我解决这个问题。

回答

0

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