반응형
https://teserre.tistory.com/21
찾다 찾다 못 찾아서
자바스크립트 sdk를 다 적용했더니 보안적으로 너무 위험해서... 헤매던 도중에 발견한 php sdk 설명서
이걸 왜 숨기는 지 잘 모르겠다.
https://developers.facebook.com/docs/graph-api/reference/user/?locale=ko_KR
composer require facebook/graph-sdk
// view.php
<a id="Facebook_login" class="socials__social icofont-facebook" href="<?= $loginUrl; ?>">
<div class="visually-hidden">facebook</div>
</a>
// view 컨트롤러
use COMPOSERPATH; // 컴포저의 경로를 잡아준다.
$fb = new \Facebook\Facebook([
'app_id' => 'id', //페이스북 앱 id
'app_secret' => '시크릿 키', //페이스북 앱 시크릿 코드
'default_graph_version' => 'v14.0', //api 버전.
]);
$helper = $fb->getRedirectLoginHelper();
//사용자정보에 접근할 권한 옵션. 추가 옵션은 공식 문서 참조
$permissions = ['public_profile','email'];
//로그인 주소 생성. callback 주소 입력
$loginUrl = $helper->getLoginUrl(BASEURL.'/api/facebookAuth', $permissions);
$data['loginUrl'] = $loginUrl;
view('페이지', $data);
// Facebook
public function facebookAuth() {
$fb = new \Facebook\Facebook([
'app_id' => '페이스북 id',
'app_secret' => '페이스북 시크릿 키',
'default_graph_version' => 'v14.0',
]);
$helper = $fb->getRedirectLoginHelper();
//state 에러가 발생하는 경우 추가
if (isset($_GET['state'])) {
$helper->getPersistentDataHandler()->set('state', $_GET['state']);
}
// 사용자 액세스 토큰 획득
try {
$accessToken = $helper->getAccessToken();
} catch(Facebook\Exceptions\FacebookResponseException $e) {
echo 'Graph returned an error: ' . $e->getMessage();
exit;
} catch(Facebook\Exceptions\FacebookSDKException $e) {
echo 'Facebook SDK returned an erro: '.$e->getMessage();
exit;
}
//각종 에러 처리
if(!isset($accessToken)) {
if($helper->getError()) {
header('HTTP/1.1 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.1 400 Bad Request');
echo 'Bad request';
}
exit;
}
//사용자 액세스토큰 출력
echo '<h3>Access Token</h3>';
var_dump($accessToken->getValue());
$oAuth2Client = $fb->getOAuth2Client();
$tokenMetadata = $oAuth2Client->debugToken($accessToken);
//사용자 토큰 정보 출력
echo '<h3>Metadata</h3>';
var_dump($tokenMetadata);
// $tokenMetadata->validateAppId('{app_id}'); 이거 2개 타면 중간에 죽어버려 잠시 꺼버림.
// $tokenMetadata->validateExpiration();
echo '<h3>Email</h3>';
$emailRaw = ($fb->get('/me?fields=email', $accessToken)); // 이메일 주소를 호출한다.
echo var_dump($emailRaw->getGraphUser()); // 이메일과 회원 id 가져오기
echo var_dump($emailRaw->getGraphUser()->getEmail()); // 이메일 주소만 가져오기
//장기 토큰 변환
if(!$accessToken->isLongLived()) {
try{
$accessToken = $oAuth2Client->getLongLivedAccessToken($accessToken);
$response = $fb->get('/me', $accessToken);
} catch(Facebook\Exceptions\FacebookSDKException $e) {
echo "<p>Error getting long-lived access token: " . $e->getMessage()."</p>\n\n";
exit;
}
$graphNode = $response->getGraphNode();
}
//변환된 장기 토큰 출력
echo '<h3>Long-lived</h3>';
var_dump($accessToken->getValue());
//액세스 토큰 세션에 저장
$_SESSION['fb_access_token'] = $accessToken;
}
728x90
'취업 > 소셜로그인' 카테고리의 다른 글
[CI4] 구글로그인 SDK PHP (프론트-컨트롤러 사용) (0) | 2022.06.23 |
---|---|
[ci4] kakako 로그인 기능 구현. (0) | 2022.06.10 |
[ci4]소셜로그인 new 코드 구글 로그인(JS - 프론트 코드) (8) | 2022.06.01 |
[ci4] 소셜로그인 페이스북 로그인/로그아웃 (0) | 2022.06.01 |
[ci4] 소셜로그인 카카오 로그인/로그아웃 (0) | 2022.06.01 |