【问题标题】:InsufficientPermissionException while publishing on facebook在 Facebook 上发布时出现 InsufficientPermissionException
【发布时间】:2015-01-26 15:40:16
【问题描述】:

social 将我的 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)

【问题讨论】:

    标签: facebook facebook-graph-api spring-security spring-social spring-social-facebook


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-10-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-12-01
        • 1970-01-01
        相关资源
        最近更新 更多