@@ -120,7 +120,7 @@ abstract class BaseFacebook
120
120
/**
121
121
* Version.
122
122
*/
123
- const VERSION = '3.1.0 ' ;
123
+ const VERSION = '3.1.1 ' ;
124
124
125
125
/**
126
126
* Default options for curl.
@@ -337,11 +337,23 @@ protected function getUserAccessToken() {
337
337
// the access token.
338
338
$ signed_request = $ this ->getSignedRequest ();
339
339
if ($ signed_request ) {
340
+ // apps.facebook.com hands the access_token in the signed_request
340
341
if (array_key_exists ('oauth_token ' , $ signed_request )) {
341
342
$ access_token = $ signed_request ['oauth_token ' ];
342
343
$ this ->setPersistentData ('access_token ' , $ access_token );
343
344
return $ access_token ;
344
345
}
346
+
347
+ // the JS SDK puts a code in with the redirect_uri of ''
348
+ if (array_key_exists ('code ' , $ signed_request )) {
349
+ $ code = $ signed_request ['code ' ];
350
+ $ access_token = $ this ->getAccessTokenFromCode ($ code , '' );
351
+ if ($ access_token ) {
352
+ $ this ->setPersistentData ('code ' , $ code );
353
+ $ this ->setPersistentData ('access_token ' , $ access_token );
354
+ return $ access_token ;
355
+ }
356
+ }
345
357
346
358
// signed request states there's no access token, so anything
347
359
// stored should be cleared.
@@ -635,11 +647,15 @@ protected function establishCSRFTokenState() {
635
647
* @return mixed An access token exchanged for the authorization code, or
636
648
* false if an access token could not be generated.
637
649
*/
638
- protected function getAccessTokenFromCode ($ code ) {
650
+ protected function getAccessTokenFromCode ($ code, $ redirect_uri = null ) {
639
651
if (empty ($ code )) {
640
652
return false ;
641
653
}
642
654
655
+ if ($ redirect_uri === null ) {
656
+ $ redirect_uri = $ this ->getCurrentUrl ();
657
+ }
658
+
643
659
try {
644
660
// need to circumvent json_decode by calling _oauthRequest
645
661
// directly, since response isn't JSON format.
@@ -648,7 +664,7 @@ protected function getAccessTokenFromCode($code) {
648
664
$ this ->getUrl ('graph ' , '/oauth/access_token ' ),
649
665
$ params = array ('client_id ' => $ this ->getAppId (),
650
666
'client_secret ' => $ this ->getApiSecret (),
651
- 'redirect_uri ' => $ this -> getCurrentUrl () ,
667
+ 'redirect_uri ' => $ redirect_uri ,
652
668
'code ' => $ code ));
653
669
} catch (FacebookApiException $ e ) {
654
670
// most likely that user very recently revoked authorization.
0 commit comments