본문 바로가기
공부/PHP

페이스북 php 로그인 하나의 파일로 구현

by yeaseul912 2018. 1. 17.
728x90




하나의 php파일로 페이스북 로그인 하는 방법입니다! 

 

먼저 개발자 페이지에서 개발자 아이디로 로그인 후 앱을 만들고

 

앱ID와 시크릿코드 를 얻어와야합니다.!!

 

페이지는 요깅!

https://developers.facebook.com/apps/

 

1. 대시보드 -> 설정 -> 기본설정

 

개발자 아이디로 로그인 하셨다면 먼저 앱을 만들어주시구요!(그건 생략하겠습니다.)

 

대시보드에 들어오면 이렇게 생긴 놈이 나옵니다.!


 

여기서 왼쪽 파란박스에 있는 설정->기본설정에 들어가셔서 

 

 앱ID(빨간 박스) 를 얻어와야하죠. 그 옆에있는 시크릿 코드도 얻어와야합니다. ㅠ 박스를 못쳤네요 

 

그리고 앱 도메인을 적어주어야 합니다.

 

꼭 적어야 할걸요? 저는일단 자체서버에서 돌렸기 때문에

 

 http://localhost/fb_oauth.php 입니다. (fb_oauth.php는 내가 작업할 파일 이름. 아래 코드 있음) 

 

 

2. 앱이름(Facebook 로그인) -> 설정

 

 

 

이곳에 들어오셔서 

 

1. 유효한 OAuth리디액션URI http://localhost/fb_oauth.php (님들 파일경로)라고 적어줍니다.

 

2. 변경 내용을 꼭 저장해줍니다.

 

3. URI리디액션 유효성 검사를 꼭 해줍니다.

 

 

3. php sdk 다운로드

 

주소 : https://github.com/facebook/php-graph-sdk/tree/5.x

 

나는 일단 5 버전으로 받았다.!

 

저기서 clone or download 클릭 후 zip파일 다운로드해준다.

 

 

 

그리고 src라는 폴더를  dodcument root 파일안에 넣어준다..

 

설마 이것까지 설명해야 하는건 아니겠지? ㅎㄷㄷ

 

참고로 나는 MAMP 쓴다! ㅋㅋ

 

그리고 fb_oauth 파일 생성해주시고~

 

 

4. 코드작성 ㄱㄱㄱㄱㄱ

 

fb_oauth.php

<?php

session_start();
require_once __DIR__ . '/src/Facebook/autoload.php'; // download official fb sdk for php @ https://github.com/facebook/php-graph-sdk

$fb = new Facebook\Facebook([
 'app_id' => 'APP_ID', //님의 앱ID 적어주세요
 'app_secret' => 'APP_SECRET', //님의 시크릿코드 적어주세요
 'default_graph_version' => 'v2.11',
 ]);

$helper = $fb->getRedirectLoginHelper();

$permissions = ['email']; // optional

try {
 if (isset($_SESSION['facebook_access_token'])) {
   $accessToken = $_SESSION['facebook_access_token'];
 } else {
   $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 (isset($_SESSION['facebook_access_token'])) {
 $fb->setDefaultAccessToken($_SESSION['facebook_access_token']);
 } else {
   // getting short-lived access token
   $_SESSION['facebook_access_token'] = (string) $accessToken;

   // OAuth 2.0 client handler
   $oAuth2Client = $fb->getOAuth2Client();

   // Exchanges a short-lived access token for a long-lived one
   $longLivedAccessToken = $oAuth2Client->getLongLivedAccessToken($_SESSION['facebook_access_token']);
   $_SESSION['facebook_access_token'] = (string) $longLivedAccessToken;
   
   // setting default access token to be used in script
   $fb->setDefaultAccessToken($_SESSION['facebook_access_token']);
 }

 // redirect the user back to the same page if it has "code" GET variable
 if (isset($_GET['code'])) {
   header('Location: ./');
 }

 // getting basic info about user
 try {
   $profile_request = $fb->get('/me?fields=name,first_name,last_name,email');
   $profile = $profile_request->getGraphNode()->asArray();
 } catch(Facebook\Exceptions\FacebookResponseException $e) {

 // When Graph returns an error
 echo 'Graph returned an error: ' . $e->getMessage();
 session_destroy();
 
 // redirecting user back to app login page
 header("Location: ./");

 exit;
 } catch(Facebook\Exceptions\FacebookSDKException $e) {

 // When validation fails or other local issues
 echo 'Facebook SDK returned an error: ' . $e->getMessage();
 exit;
 }
 
 // printing $profile array on the screen which holds the basic info about user
 print_r($profile);

 // Now you can redirect to another page and use the access token from $_SESSION['facebook_access_token']
} else {
 // replace your website URL same as added in the developers.facebook.com/apps e.g. if you used http instead of https and you used non-www version or www version of your website then you must add the same here
 $loginUrl = $helper->getLoginUrl('http://localhost/fb_oauth.php', $permissions);
 echo '<a href="' . $loginUrl . '">Log in with Facebook!</a>';
}

출처 : https://github.com/sohaibilyas/facebook-php-sdk-v5/blob/master/login-on-website-get-basic-info.php

 

5. 결과화면

 

따란 이렇게 나온다 :) 

 

이게 지금 로그인이 되어있어서 그런데 

 

로그인 안되어있으면 Log in with Facebook! 이라고 나오고 

클릭하면 저렇게 정보가 나온다!

 

음.. 로그아웃은 session destory 해주면 되지않을까? 

 

일단 이렇게 마무으리 :) 

 

다음엔 개발자 문서에 나와있는 대로

 

"일반적으로 Facebook 로그인은 하나의 PHP 스크립트로 구현되지만, 

응답에 대한 제어 기능을 강화하고 구분을 명확하게 하기 위해 두 개의 개별 PHP 스크립트를 사용하는 것이 좋습니다."

 

라는 말을 따라 파일 두개로 나누어서 만들어 보겠다! 

 

페이스북 PHP 개발자 로그인 예시 페이지 : 

https://developers.facebook.com/docs/php/howto/example_facebook_login

 

구럼 이만! 

반응형

댓글