首页 文章

Spring 季社交登录与linkedin

提问于
浏览
1

我已经为facebook,twitter和linkedin连接工厂配置了spring social for login . Facebook和Twitter的工作正常,但在登录后,使用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>

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

1 回答

  • 0

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

相关问题