Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Extended access token from Facebook not working properly

I am having trouble since Facebook has removed the offline_access permission.

Tried 2 things:

  1. I am making the call as suggested by Facebook.

    https://graph.facebook.com/oauth/access_token?             
        client_id=APP_ID&
        client_secret=APP_SECRET&
        grant_type=fb_exchange_token&
        fb_exchange_token=EXISTING_ACCESS_TOKEN 
    
  2. I also tried the Android SDK, which uses an intent to get an extended access token:

    intent.setClassName("com.facebook.katana", "com.facebook.katana.platform.TokenRefreshService");
    

At developers.facebook.com I set my app to "Native/Desktop".

I disabled the offline_access on the App settings as well.

I removed the old permissions from my Facebook account before trying.

Both methods provide me with 24 hour tokens. Maybe someone can help me with making the right call to get a 60 day token?

I saw quite a few bug reports about this issue, but also that they were solved. It looks like not in my case.

like image 499
Rutger Avatar asked Mar 21 '12 11:03

Rutger


People also ask

How do I fix an invalid access token on Facebook?

Please click on Facebook Ads Extension, Manage Settings, go to Advanced options and click on Update token.

How do I refresh my Facebook access token?

These tokens are refreshed once per day, when the person using your app makes a request to Facebook's servers. If no requests are made, the token will expire after about 60 days and the person will have to go through the login flow again to get a new token.

How do I fix an invalid access token?

There are two ways to fix the error: (RECOMMENDED) Change the application signature algorithm to RS256 instead of HS256. Change the value of your responseType parameter to token id_token (instead of the default), so that you receive an access token in the response.

How can I check if my Facebook access token is valid?

You can simply request https://graph.facebook.com/me?access_token=xxxxxxxxxxxxxxxxx if you get an error, the token is invalid. If you get a JSON object with an id property then it is valid. Unfortunately this will only tell you if your token is valid, not if it came from your app.


1 Answers

use following function to get extended access token: public function getExtendedAccessToken(){

try {
    // need to circumvent json_decode by calling _oauthRequest
      // directly, since response isn't JSON format.
    $access_token_response =
        $this->_oauthRequest(
            $this->getUrl('graph', '/oauth/access_token'),
            $params = array(    'client_id' => $this->getAppId(),
                                'client_secret' => $this->getApiSecret(),
                                'grant_type'=>'fb_exchange_token',
                                'fb_exchange_token'=>$this->getAccessToken(),
                          ));

} catch (FacebookApiException $e) {
  // most likely that user very recently revoked authorization.
  // In any event, we don't have an access token, so say so.
  return false;
}

if (empty($access_token_response)) {
  return false;
}

$response_params = array();
parse_str($access_token_response, $response_params);
if (!isset($response_params['access_token'])) {
  return false;
}

return $response_params['access_token'];

}

like image 65
Needhi Agrawal Avatar answered Nov 15 '22 01:11

Needhi Agrawal