2017-04-14 85 views
1

我正在撰写春季社交。当我点击/登入/ Facebook的按钮:春季社交 - 完成OAuth 2连接时的异常:操作需要授权,

异常而完成的OAuth 2连接:需要 授权的操作,但是API创建 擅自: Org.springframework.social.MissingAuthorizationException。

我也遇到了这个错误。
作为调试的结果是,Facebook的访问令牌似乎好评。

错误发生在Facebook上的正常登录后这一部分。
ConnectSupport类:

AccessGrant accessGrant = connectionFactory.getOAuthOperations().exchangeForAccess(code, callbackUrl(request), null); 

这是我的作文。

SocialConfig:

@Inject 
private DataSource dataSource; 

@Autowired 
UserRepository userRepository; 

@Autowired 
PostSocialSignInAdapter postSocialSignInAdapter; 

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

@Override 
public void addConnectionFactories(ConnectionFactoryConfigurer cfConfig, Environment env) { 
    String appKey = "4123213121231231212331"; 
    String appSecret = "512312312lkjj1232kj3l1jl213"; 

    cfConfig.addConnectionFactory(new FacebookConnectionFactory(appKey, appSecret)); 
} 

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

@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 ProviderSignInController providerSignInController(ConnectionFactoryLocator connectionFactoryLocator, 
     UsersConnectionRepository usersConnectionRepository) { 
    ProviderSignInController providerSignInController = new ProviderSignInController(connectionFactoryLocator, 
      usersConnectionRepository, postSocialSignInAdapter); 
    providerSignInController.setSignUpUrl("/"); 
    return providerSignInController; 
} 

UserRepository接口

public interface UserRepository extends JpaRepository<User, String> { 
    public User findByusername(String username); 
} 

错误日志

ERROR: org.springframework.social.connect.web.ProviderSignInController - Exception while completing OAuth 2 connection: 
org.springframework.social.MissingAuthorizationException: Authorization is required for the operation, but the API binding was created without authorization. 

    at org.springframework.social.facebook.api.impl.AbstractFacebookOperations.requireAuthorization(AbstractFacebookOperations.java:30) 
at org.springframework.social.facebook.api.impl.UserTemplate.getUserProfile(UserTemplate.java:48) 
at org.springframework.social.facebook.connect.FacebookAdapter.setConnectionValues(FacebookAdapter.java:42) 
at org.springframework.social.facebook.connect.FacebookAdapter.setConnectionValues(FacebookAdapter.java:30) 
at org.springframework.social.connect.support.AbstractConnection.setValues(AbstractConnection.java:175) 
at org.springframework.social.connect.support.AbstractConnection.initKey(AbstractConnection.java:137) 
at org.springframework.social.connect.support.OAuth2Connection.<init>(OAuth2Connection.java:75) 

我不知道如何做到这一点。请帮帮我。

回答

1

这可能与许多原因有关,但起初你应该检查你的spring-social-facebook版本。由于Facebook图形API 2.2弃用,Spring的建议是将版本更改为2.0.3.RELEASE。 别人在谈论类似的问题在这里"similar post

不要尝试2.0.2.RELEASE,据我所知有不一致的属性类型的JSON调用映射的一个问题。

+0

感谢您的信息。更改版本解决了问题。 – ansatgol

+0

同样的问题。然后,我将spring-social-facebook从版本1.1.1.RELEASE更改为版本2.0.3.RELEASE,并解决了问题。谢谢。 – Yuci