使用范围属性进行Facebook身份验证

时间:2014-04-28 16:28:49

标签: java facebook spring-mvc spring-social

我正在编写需要访问用户电子邮件并发布到时间线的Facebook APP。我找到了这两个链接:

告诉我使用范围和defaultScope属性:

org.springframework.social.facebook.security.FacebookAuthenticationService

但这两种解决方案都没有起作用。

该应用程序使用spring-social-samples作为起点:

@Configuration
@EnableSocial
public class FacebookConfig implements SocialConfigurer
{
    @Inject
    private DataSource dataSource;

    @Override
    public void addConnectionFactories(ConnectionFactoryConfigurer cfConfig, Environment env)
    {
        final FacebookConnectionFactory fbcf = new FacebookConnectionFactory(env.getProperty("facebook.appKey"),
                env.getProperty("facebook.appSecret"));
        fbcf.setScope(env.getProperty("facebook.scope"));
        cfConfig.addConnectionFactory(fbcf);
    }

    /**
     * Singleton data access object providing access to connections across all
     * users.
     */
    @Override
    public UsersConnectionRepository getUsersConnectionRepository(ConnectionFactoryLocator connectionFactoryLocator)
    {
        JdbcUsersConnectionRepository repository = new JdbcUsersConnectionRepository(dataSource,
                connectionFactoryLocator, Encryptors.noOpText());
        repository.setConnectionSignUp(new SimpleConnectionSignUp());
        return repository;
    }

    public UserIdSource getUserIdSource()
    {
        return new UserIdSource() {
            @Override
            public String getUserId()
            {
                return SecurityContext.getCurrentUser().getId();
            }
        };
    }

    @Bean
    @Scope(value = "request", proxyMode = ScopedProxyMode.INTERFACES)
    public Facebook facebook(ConnectionRepository repository)
    {
        Connection<Facebook> connection = repository.findPrimaryConnection(Facebook.class);
        return connection != null ? connection.getApi() : null;
    }

    @Bean
    public CanvasSignInController canvasSignInController(ConnectionFactoryLocator connectionFactoryLocator,
            UsersConnectionRepository usersConnectionRepository, Environment env)
    {
        return new CanvasSignInController(connectionFactoryLocator, usersConnectionRepository,
                new SimpleSignInAdapter(), env.getProperty("facebook.appKey"), env.getProperty("facebook.appSecret"),
                env.getProperty("facebook.canvasPage"));
    }
}

如何设置所需权限的范围?

1 个答案:

答案 0 :(得分:0)

类CanvasSignInController有一个scope属性,用于在Facebook上请求权限,只需使用有效值设置此属性,并且永远来到新世界。