我已经通过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>
这里,问题是使用linkedin来登录dosent因为连接对象为null而提供任何用户信息。 任何人都可以帮助我。
答案 0 :(得分:0)
redirect_url不应该是localhost。也使uri相对而不是绝对。 我做的是使用我的虚拟博客url之一,使用此url在localhost上设置别名并修改主机文件。然后我使用此URL访问该应用程序。 对于linkedIn,redirect_url必须是在应用程序中注册的网址之一。