Facebook Login with Spring Social using Existing User Access Token

后端 未结 1 884
无人及你
无人及你 2021-02-01 23:32

Here\'s what I currently have:

  • Spring REST service where many of the APIs require the user to be authenticated
  • A \'registration\' API (/
相关标签:
1条回答
  • 2021-02-02 00:07

    I had the exact same issue and here's how I made it work. You probably have a SocialConfigurer somewhere with the following:

    @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 ...
    }
    

    From here, what you can do is, in a Controller/RestController, add a mapping with a RequestParam for your token that you will send to your server:

    @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";
    }
    

    Useful references

    • UsersConnectionRepository
    • ConnectionRepository
    0 讨论(0)
提交回复
热议问题