2016-08-07 2 views
1

내가 얻을 페이스 북 API의 다음과 같은 오류 :오류 페이스 북의 API를 '로그인하지 않음'

은 '로그인하지 :.. 당신은 로그인하지 않은 로그인하고 다시 시도하십시오'

저는 laravel 5 및 php-sdk-v4 라이브러리를 사용하고 있으므로 콜백 페이지를 컨트롤러에 fucnction으로 추가합니다.

namespace App\Http\Controllers; 

use Illuminate\Http\Request; 
use App\Http\Requests; 
use Session; 
use Facebook; 

class FacebookLoginController extends MainController { 

    public function login() { 

     $fb = new Facebook\Facebook([ 
      'app_id' => '****', 
      'app_secret' => '****', 
      'default_graph_version' => 'v2.7', 
     ]); 

     $helper = $fb->getRedirectLoginHelper(); 

     $permissions = ['email']; 
     $loginUrl = $helper->getLoginUrl('http://localhost/tshop/public/fbcallback', $permissions); 
     //dd($fb); 
     echo '<a href="' . $loginUrl . '">Log in with Facebook!</a>'; 
    } 

    public function fbcallback() { 

     $fb = new Facebook\Facebook([ 
      'app_id' => '1780077285568634', 
      'app_secret' => '625dc9eb7561f10bebc79ae2a1c96dca', 
      'default_graph_version' => 'v2.7', 
     ]); 

     $helper = $fb->getRedirectLoginHelper(); 
     $_SESSION['FBRLH_state']=$_GET['state']; 

     try { 
      $accessToken = $helper->getAccessToken(); 
     } catch (Facebook\Exceptions\FacebookResponseException $e) { 
      // When Graph returns an error 
      echo 'Graph returned an error: ' . $e->getMessage(); 
      exit; 
     } catch (Facebook\Exceptions\FacebookSDKException $e) { 
      // When validation fails or other local issues 
      echo 'Facebook SDK returned an error: ' . $e->getMessage(); 
      exit; 
     } 

     if (!isset($accessToken)) { 
      if ($helper->getError()) { 
       header('HTTP/1.0 401 Unauthorized'); 
       echo "Error: " . $helper->getError() . "\n"; 
       echo "Error Code: " . $helper->getErrorCode() . "\n"; 
       echo "Error Reason: " . $helper->getErrorReason() . "\n"; 
       echo "Error Description: " . $helper->getErrorDescription() . "\n"; 
      } else { 
       header('HTTP/1.0 400 Bad Request'); 
       echo 'Bad request'; 
      } 
      exit; 
     } 

     echo '<h3>Access Token</h3>'; 
     var_dump($accessToken->getValue()); 

// The OAuth 2.0 client handler helps us manage access tokens 
     $oAuth2Client = $fb->getOAuth2Client(); 

// Get the access token metadata from /debug_token 
     $tokenMetadata = $oAuth2Client->debugToken($accessToken); 
     echo '<h3>Metadata</h3>'; 
     echo '<pre>'; 
     print_r($tokenMetadata); 

// Validation (these will throw FacebookSDKException's when they fail) 
     $tokenMetadata->validateAppId('1780077285568634'); // Replace {app-id} with your app id 
// If you know the user ID this access token belongs to, you can validate it here 
//$tokenMetadata->validateUserId('123'); 
     $tokenMetadata->validateExpiration(); 

     if (!$accessToken->isLongLived()) { 
      // Exchanges a short-lived access token for a long-lived one 
      try { 
       $accessToken = $oAuth2Client->getLongLivedAccessToken($accessToken); 
      } catch (Facebook\Exceptions\FacebookSDKException $e) { 
       echo "<p>Error getting long-lived access token: " . $helper->getMessage() . "</p>\n\n"; 
       exit; 
      } 

      echo '<h3>Long-lived</h3>'; 
      var_dump($accessToken->getValue()); 
     } 

     $_SESSION['fb_access_token'] = (string) $accessToken; 

     /* Get user details from facebook */ 
     try { 
      // Returns a `Facebook\FacebookResponse` object 
      $response = $fb->get('/me?fields=id,name,email', $accessToken); 
     } catch (Facebook\Exceptions\FacebookResponseException $e) { 
      echo 'Graph returned an error: ' . $e->getMessage(); 
      exit; 
     } catch (Facebook\Exceptions\FacebookSDKException $e) { 
      echo 'Facebook SDK returned an error: ' . $e->getMessage(); 
      exit; 
     } 

     echo '<hr>'; 

     $user = $response->getGraphUser(); 

     echo '<hr>'; 
     echo $user['name']; 
    } 

} 
+0

'default_graph_version'=> 'v2.5'를 'default_graph_version'=> 'v2.7'로 변경했습니다. facebook 개발자 API 대시 보드가 나타나는 것처럼 – user3387719

+0

앱 비밀번호를 재설정해야합니다 __now__ . (여기에 방금 노출되었으므로 지금이 책을 읽는 모든 사용자가 앱에 대한 유효한 앱 액세스 토큰을 갖게됩니다.) – CBroe

답변

0

OAuth 리디렉션 URI가 잘못되었거나 www를 추가했기 때문일 수 있습니다. 귀하의 URL에 www가 단순히 "http://yoururl"을 제거하는 경우.

페이 스북 앱에서 이것을 변경하십시오.

나는 실수를했다. 희망이 당신을 위해 작동합니다.

+0

감사합니다. "Facebook SDK에서 오류를 반환했습니다 : 교차 사이트 요청 위조 확인에 실패했습니다. 필수 매개 변수" 상태가 "영구 데이터에서 누락되었습니다." 어쩌면 SDK 버전일까요? – user3387719

0

난 session_start()를 추가하면 효과가 있습니다! 감사!

+0

CBroe - 고마워요. 방금 2 분 후 누군가가 토큰을 사용했습니다 ..... – user3387719

관련 문제