15

Вот что я в настоящее время:Facebook Войти с Spring Social с помощью существующего пользовательского доступа Токен

    сервис
  • Spring REST, где многие из API, требуют от пользователя для аутентификации
  • «регистрация» A API (/ api/v1/register)
  • API 'login', который принимает имя пользователя/пароль (/ api/v1/login)
  • API «Facebook Login», который использует Spring и Spring Security для создания пользовательского соединения и войдите в систему (/ auth/facebook)

Моя проблема заключается в том, что я хочу, чтобы эти API были использованы несколькими клиентами, но способ входа в Facebook прямо сейчас не работает на мобильных устройствах (отлично работает на веб-сайте).

Вот мобильный сценарий:

  • Я использую Facebook, IOS SDK, чтобы получить разрешение от пользователя
  • Facebook возвращает пользователю доступ лексема
  • Я хочу отправить бэкэнд службу этой токен и принять Spring Social, создать пользовательское соединение и т. д.

Можно ли это сделать? Или мне придется написать свой собственный API для продолжения подключения пользователя?

Цените любую помощь!

ответ

9

У меня была одна и та же проблема, и вот как я сделал ее работу. Вы, вероятно, SocialConfigurer где-то со следующим:

@Configuration 
@EnableSocial 
public class SocialConfig implements SocialConfigurer { 

    @Autowired 
    private DataSource dataSource; 

    @Bean 
    public FacebookConnectionFactory facebookConnectionFactory() { 
     FacebookConnectionFactory facebookConnectionFactory = new FacebookConnectionFactory("AppID", "AppSecret"); 
     facebookConnectionFactory.setScope("email"); 
     return facebookConnectionFactory; 
    } 

    @Override 
    public void addConnectionFactories(ConnectionFactoryConfigurer cfConfig, Environment env) { 
     cfConfig.addConnectionFactory(facebookConnectionFactory()); 
    } 

    @Override 
    public UserIdSource getUserIdSource() { 
     return new AuthenticationNameUserIdSource(); 
    } 

    @Override 
    public UsersConnectionRepository getUsersConnectionRepository(ConnectionFactoryLocator connectionFactoryLocator) { 
     return new JdbcUsersConnectionRepository(dataSource, connectionFactoryLocator, Encryptors.noOpText()); 
    } 

    // Other @Bean maybe ... 
} 

здесь, что вы можете сделать, это, в контроллере/RestController, добавить сопоставление с RequestParam для ваших маркеров, который вы будете отправлять на сервер:

@Autowired 
private FacebookConnectionFactory facebookConnectionFactory; 

@Autowired 
private UsersConnectionRepository usersConnectionRepository; 

@RequestMapping(value = "/my-facebook-url", method = RequestMethod.POST) 
public String fb(@RequestParam String token) { 
    AccessGrant accessGrant = new AccessGrant(token); 
    Connection<Facebook> connection = facebookConnectionFactory.createConnection(accessGrant); 

    UserProfile userProfile = connection.fetchUserProfile(); 
    usersConnectionRepository.createConnectionRepository(userProfile.getEmail()).addConnection(connection); 

    // ... 

    return "Done"; 
} 

Полезные ссылки

+0

Hi @Philippe! У вас это работает с spring-social-facebook version 2? Спасибо – troig

+1

@troig, точно да. У меня также есть spring-social-core/web/config/security: 1.1.2 есть ли у вас какие-либо проблемы с ним? – Philippe

+0

Еще раз спасибо @Philippe! Как вы говорите, он обновлял версию весенне-социал-ядра до версии 1.1.2. Ошибка с моей предыдущей версией (1.1.0). +1 – troig

 Смежные вопросы

  • Нет связанных вопросов^_^