0

社交以将我的 Web 应用程序与 Facebook 集成,现在当用户使用 Facebook 登录在我的 Web 应用程序中登录时,我可以从他/她的个人资料中读取数据,但是每当我尝试执行一些写入操作时,例如更新状态或在用户的墙上发布一个帖子,我得到一个InsufficientPermissionException

我的登录表格是:

<form name="fb_signin" id="fb_signin" action="${pageContext.request.contextPath}/auth/facebook">
   <input type="hidden" name="scope" value="email,publish_stream,read_stream,user_status,user_photos,publish_actions,offline_access" /> 
   <button class="btn btn-facebook" type="submit"> <i class="icon-facebook"></i>facebook</button> 
</form>

此操作所需的配置部分是:

<bean id="userIdSource" class="org.springframework.social.security.AuthenticationNameUserIdSource"/>

<bean id="facebookApiHelper" class="org.springframework.social.facebook.config.support.FacebookApiHelper">
    <constructor-arg index="0" ref="usersConnectionRepository"/>
    <constructor-arg index="1" ref="userIdSource"/>
</bean>

<bean id="connectionFactoryLocator" class="org.springframework.social.security.SocialAuthenticationServiceRegistry">
    <property name="authenticationServices">
    <list>
        <bean class="org.springframework.social.facebook.security.FacebookAuthenticationService">
            <constructor-arg value="${facebook.app.id}" />
            <constructor-arg value="${facebook.app.secret}" />
            <!-- Important: The next property name changed from "scope" to "defaultScope" in 1.1.0.M4 -->
            <property name="defaultScope" value="email,publish_actions,publish_stream,read_stream,user_status,user_photos,offline_access" />               
        </bean>
    </list>
    </property>
</bean>

现在我的控制器是:

public class FacebookOperationController {

    private static final Logger logger = LoggerFactory.getLogger(FacebookOperationController.class);

    @Autowired
    protected FacebookApiHelper facebookApiHelper;

    @Autowired
    UserIdSource userIdSource;

    private UsersConnectionRepository usersConnectionRepository;

    @Autowired
    public FacebookOperationController(UsersConnectionRepository usersConnectionRepository)
    {
        this.usersConnectionRepository = usersConnectionRepository;
    }

    @RequestMapping(method = RequestMethod.GET)
    public String shareWithFacebook(WebRequest request,Model model){

        Facebook facebook = facebookApiHelper.getApi();
        Connection<Facebook> connection = usersConnectionRepository.createConnectionRepository(userIdSource.getUserId()).findPrimaryConnection(Facebook.class);
        //connection.updateStatus("hello world");
        MultiValueMap<String, Object> map = new LinkedMultiValueMap<>();
        map.set("link", "www.equinoxrar.com");
        map.set("name", "Hi This is a Test Post");
        map.set("caption", "Link Caption");
        map.set("description", "Loooooo....ng description here");
        map.set("message", "hello world");

        // THE BELOW LINES ARE THE CRITICAL PART I WAS LOOKING AT!
        map.set("picture", "http://www.imageRepo.com/resources/test.png"); // the image on the left
        //map.set("actions", "{'name':'myAction', 'link':'http://www.bla.com/action'}"); // custom actions as JSON string
        //String a = facebook.publish(userIdSource.getUserId(), "feed", map);
        String b = connection.getApi().publish(userIdSource.getUserId(), "feed", map);
        //publish(userIdToPostTo, "feed", map);
        return "tilesname";
    }
}

我能够从此控制器执行读取操作,但获得InsufficientPermissionException任何写入操作。任何人都可以有任何想法吗?我在这里遇到的例外是:

org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.springframework.social.InsufficientPermissionException: Insufficient permission for this operation.
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:948)
    org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:827)
4

2 回答 2

1

实际上我已经解决了这个问题,当我使用应用程序管理员登录时,我可以从我的网络应用程序在 facebook 中发布,但是对于测试 facebook 应用程序,只有添加到 facebook 应用程序的管理员/开发人员/测试人员可以发布,对于所有其他我们有将我的应用程序的详细信息(登录审查)提交给 facebook,一旦 facebook 批准相同,那么它将对所有用户开放。

于 2015-01-29T10:56:46.590 回答
0

您能否发布更多堆栈跟踪以了解更多错误信息?

您也可以尝试创建一个 org.springframework.social.facebook.api.FacebookLink 对象并使用

facebook.feedOperations().postLink("我在发帖", 链接);

于 2015-01-28T14:55:35.847 回答