2015-03-05 2 views
2

Я внедрил Spring для Facebook, Twitter и Google. Для первых 2 он работает, но Google перенаправляет пользователя на /signin после принятия на странице google, где вы разрешаете моему приложению получать доступ к вашей учетной записи google +. /signin - 404. Если я сделаю страницу для/подписания, страница будет отображаться, но пользователь не выполнил вход.Spring Social Google возвращается после ошибочного входа

Я знаком с основными механиками connectController и GoogleConnectionFactory, но я считаю, что он должен перенаправить запрос обратно туда, откуда он появился, и с помощью токенов доступа. Это/auth/google, я верю. Я попробовал перенаправление из/signin в/auth/google, но это не сработало. Как упоминалось для Twitter и Facebook, проблем не было.

Код: общественный класс SocialConfig реализует SocialConfigurer

@Override 
public void addConnectionFactories(ConnectionFactoryConfigurer cfConfig, Environment env) { 
    cfConfig.addConnectionFactory(new FacebookConnectionFactory(
      env.getProperty("facebook.app.id"), 
      env.getProperty("facebook.app.secret") 
    )); 
    cfConfig.addConnectionFactory(new TwitterConnectionFactory(
      env.getProperty("twitter.consumer.key"), 
      env.getProperty("twitter.consumer.secret") 
    )); 
    cfConfig.addConnectionFactory(new GoogleConnectionFactory(
      env.getProperty("google.app.id"), 
      env.getProperty("google.app.secret"))); 
} 

@Bean 
public ConnectController connectController(ConnectionFactoryLocator connectionFactoryLocator, ConnectionRepository connectionRepository) { 
    return new ConnectController(connectionFactoryLocator, connectionRepository); 
} 

SecurityConfig.java

.apply(getSpringSocialConfigurer()); //to http. 

private SpringSocialConfigurer getSpringSocialConfigurer() { 
    SpringSocialConfigurer config = new SpringSocialConfigurer(); 
    config.alwaysUsePostLoginUrl(true); 
    config.postLoginUrl("/"); 

    return config; 
} 

СПЯ.

//facebook 
       <a href="${pageContext.request.contextPath}/auth/facebook" class="hidden-xs"> 
        <img src="<c:url value="/static/img/fb-login.png"/>" height="32"/>  
       </a> 

//twitter 
       <a href="${pageContext.request.contextPath}/auth/twitter" class="hidden-xs"> 
        <img src="<c:url value="/static/img/twitter-login.png"/>" height="20" width="24"/>  
       </a> 
//google 
      <form name="go_signin" id="go_signin" action="<c:url value="/auth/google"/>" method="POST" class="float-left">   
       <div onclick="this.parentNode.submit();"> 
        <img src="<c:url value="/static/img/google-login.png"/>" height="32"/>  
       </div> 
       <input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}" /> 
       <input type="hidden" name="scope" value="https://www.googleapis.com/auth/userinfo.profile https://www.googleapis.com/auth/plus.login" /> 
      </form> 

В приложении консоли Google я набор URI переадресации на: {my_url}/авториз/ Google и Javascript Origins только мой URL. Я пробовал почти каждую комбинацию. ничего, кроме/auth/google, приведет к ошибке несоответствия uri перенаправления, прежде чем вы попадете на страницу входа google.

Любые идеи приветствуются, заблаговременно.

+0

Вам необходимо изменить настройки в консоли Google, для чего разрешен redirect_uri, но тогда вы должны сконфигурировать в своем коде где-то, что должно быть на самом деле redirect_uri. Документация, вероятно, где-то говорит. – abraham

+0

Я добавил PostLoginURL, а также попытаюсь установить его в форме: Но это не сработает. Документы Google говорят, что следующее, но в моем случае, похоже, не делает этого: после того, как пользователь авторизует ваше приложение, они будут перенаправлены на ваш/oauth/url. Там вы получите параметр «code». Вы можете обменять этот код на токен доступа: это SpringSocialController, который должен обрабатывать аутентификацию. –

+0

Вы когда-нибудь решали эту проблему? У меня такая же проблема. После регистрации в первый раз google перенаправляет меня на '/ signin' вместо'/singup'. – Jagger

ответ

0

Этот проект имеет хорошую рабочую выборку по использованию весенне-социальной-гугле: https://github.com/GabiAxel/spring-social-google-example

+0

Ну, я реализовал этот урок: http://www.petrikainulainen.net/programming/spring-framework/adding-social-sign-in-to-a-spring-mvc-web-application-configuration/ Мне нужно только логин. Я посмотрел исходный код этого проекта. В документации говорится, что знак в контроллере регистрирует POST/signin/{providerId}, я получаю 404. –

0

я похожая проблема, после входа в систему, там было перенаправление/зарегистрировались, пока она не была выполнена гугле, но Весенний социальный плагин Google. Он отправляет запрос GET в https://www.googleapis.com/plus/v1/people/me, который можно вызвать только в том случае, если Google+ Api включен для вашего приложения в Google Консоли.

redirect_uri должен быть/авт/Google

Эта проблема обсуждались в https://github.com/GabiAxel/spring-social-google/issues/22. В будущем выпуске будет исправлено.