Reputation: 1037
social to integrate my web application with Facebook, now when the user is logged-in in my web application using Facebook login, I am able to read data from his/her profile but whenever I am trying to perform some write operation like update status or publish a post on user's wall , I am getting an InsufficientPermissionException
.
My Login form is:
<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>
The required part of config for this operation is:
<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>
And now my controller is:
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";
}
}
I am able to perform read operation from this Controller but getting an InsufficientPermissionException
for any write operation. Can anyone have any idea? The Exception I am getting here is:
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)
Upvotes: 0
Views: 1021
Reputation: 1037
Actually I have solved the problem, I am able to post in facebook from my web app when I used the app admin login, but for test facebook apps only admin/developers/testers added to the facebook app can post, for all other we have to submit details (login review) of my app to facebook, once facebook approve the same, then it will be open for all usrs.
Upvotes: 1
Reputation: 1661
Could you please post more of the stacktrace to get some more into the error?
You could also try creating a org.springframework.social.facebook.api.FacebookLink object and posting using
facebook.feedOperations().postLink("i'm posting", link);
Upvotes: 0