Facebook Graph API, 사용자 이메일을받는 방법?
PHPFacebook Graph API, 사용자 이메일을받는 방법?
그래프 API를 사용하고 있지만 로그인 한 사용자의 이메일 주소를 얻는 방법을 알 수 없습니다.
그래프 소개에서는 "그래프 API는 이름, 이메일 주소, 프로필 사진 및 생일을 포함하여 사이트의 가입 양식에서 일반적으로 요청하는 모든 기본 계정 등록 데이터에 대한 액세스를 제공 할 수 있습니다"
모두 좋고 좋지만 어떻게 정보에 액세스합니까?
이것은 내가 지금까지 가지고있는 것이다 :
$json = $facebook->api('/me');
$first = $json['first_name']; // gets first name
$last = $json['last_name'];
해결법
-
==============================
1.사용자 전자 메일 주소를 얻는 유일한 방법은 전자 메일 필드에 대한 확장 된 사용 권한을 요청하는 것입니다. 사용자는이를 볼 수 있어야하며 사용자의 친구 전자 메일 주소를 가져올 수 없습니다.
사용자 전자 메일 주소를 얻는 유일한 방법은 전자 메일 필드에 대한 확장 된 사용 권한을 요청하는 것입니다. 사용자는이를 볼 수 있어야하며 사용자의 친구 전자 메일 주소를 가져올 수 없습니다.
http://developers.facebook.com/docs/authentication/permissions
Auth Dialog에 전화 걸기 문자열에 scope = email를 전달하여 Facebook 연결을 사용하는 경우이 작업을 수행 할 수 있습니다.
Oauth 인증을 훨씬 쉽게 수행 할 수 있도록 file_get_contents 대신 SDK를 사용하는 것이 좋습니다.
-
==============================
2.
// Facebook SDK v5 for PHP // https://developers.facebook.com/docs/php/gettingstarted/5.0.0 $fb = new Facebook\Facebook([ 'app_id' => '{app-id}', 'app_secret' => '{app-secret}', 'default_graph_version' => 'v2.4', ]); $fb->setDefaultAccessToken($_SESSION['facebook_access_token']); $response = $fb->get('/me?locale=en_US&fields=name,email'); $userNode = $response->getGraphUser(); var_dump( $userNode->getField('email'), $userNode['email'] );
-
==============================
3.Open base_facebook.php getLoginUrl () 함수에 Access_token을 추가하십시오.
Open base_facebook.php getLoginUrl () 함수에 Access_token을 추가하십시오.
array_merge(array( 'access_token' => $this->getAccessToken(), 'client_id' => $this->getAppId(), 'redirect_uri' => $currentUrl, // possibly overwritten 'state' => $this->state), $params);
및 전자 메일 사용 범위 사용
if ($user) { echo $logoutUrl = $facebook->getLogoutUrl(); } else { echo $loginUrl = $facebook->getLoginUrl(array('scope' => 'email,read_stream')); }
-
==============================
4.사용자 이메일을 받으려면 이메일 권한을 사용하여 Facebook 계정으로 로그인해야합니다. 페이스 북 PHP SDK (github 참고)를 다음과 같이 사용하십시오.
사용자 이메일을 받으려면 이메일 권한을 사용하여 Facebook 계정으로 로그인해야합니다. 페이스 북 PHP SDK (github 참고)를 다음과 같이 사용하십시오.
먼저 사용자가 이미 로그인했는지 확인하십시오.
require "facebook.php"; $facebook = new Facebook(array( 'appId' => YOUR_APP_ID, 'secret' => YOUR_APP_SECRET, )); $user = $facebook->getUser(); if ($user) { try { $user_profile = $facebook->api('/me'); } catch (FacebookApiException $e) { $user = null; } }
그가 아니라면 이메일 권한을 묻는 로그인 링크를 표시 할 수 있습니다.
if (!$user) { $args = array('scope' => 'email'); echo '<a href="' . $facebook->getLoginUrl() . '">Login with Facebook</a>'; } else { echo '<a href="' . $facebook->getLogoutUrl() . '">Logout</a>'; }
그가 로그인 할 때 이메일은 $ user_profile 배열에서 찾을 수 있습니다.
희망이 도움이됩니다!
-
==============================
5.로그인 한 사용자의 프로필에서 전자 메일 주소를 검색 할 수 있습니다. 다음은 코드 스 니펫입니다.
로그인 한 사용자의 프로필에서 전자 메일 주소를 검색 할 수 있습니다. 다음은 코드 스 니펫입니다.
<?php $facebook = new Facebook(array( 'appId' => $initMe["appId"], 'secret' => $initMe["appSecret"], )); $facebook->setAccessToken($initMe["accessToken"]); $user = $facebook->getUser(); if ($user) { $user_profile = $facebook->api('/me'); print_r($user_profile["email"]); } ?>
-
==============================
6.https://graph.facebook.com/me
https://graph.facebook.com/me
현재 로그인 한 사용자에 대한 정보를 제공하지만 oauth 토큰을 제공해야합니다. 만나다:
http://developers.facebook.com/docs/reference/api/user
-
==============================
7.프로필의 이메일은 확장 된 권한을 사용하여 얻을 수 있지만 로그인 fb에 사용 된 이메일을받을 수 없다고 생각합니다. 내 애플 리케이션에서 나는 목록에있는 사용자의 다중 fb 계정을 표시하고 싶었지만 각 계정의 고유 식별자로 fb 계정의 로그인 전자 메일을 표시하려고했지만 fb에서 꺼낼 수 없었습니다. 사용자 프로필의 기본 이메일이지만 내 경우 로그인 이메일과 기본 이메일이 다릅니다.
프로필의 이메일은 확장 된 권한을 사용하여 얻을 수 있지만 로그인 fb에 사용 된 이메일을받을 수 없다고 생각합니다. 내 애플 리케이션에서 나는 목록에있는 사용자의 다중 fb 계정을 표시하고 싶었지만 각 계정의 고유 식별자로 fb 계정의 로그인 전자 메일을 표시하려고했지만 fb에서 꺼낼 수 없었습니다. 사용자 프로필의 기본 이메일이지만 내 경우 로그인 이메일과 기본 이메일이 다릅니다.
-
==============================
8.Facebook 응용 프로그램이 게시되었는지 확인하십시오. email, public_profile 및 user_friends에 대한 데이터를 받으려면 앱을 공개해야합니다.
Facebook 응용 프로그램이 게시되었는지 확인하십시오. email, public_profile 및 user_friends에 대한 데이터를 받으려면 앱을 공개해야합니다.
나중에 개발 목적으로 사용 중지하고 이메일 필드를 계속 사용할 수 있습니다.
-
==============================
9.개발 중에 다음 도구가 유용 할 수 있습니다.
개발 중에 다음 도구가 유용 할 수 있습니다.
https://developers.facebook.com/tools/debug/accesstoken/
https://developers.facebook.com/tools/explorer
-
==============================
10.API의 버전 번호를 "2.11"이 아닌 "v2.11"과 같이 지정하십시오.
API의 버전 번호를 "2.11"이 아닌 "v2.11"과 같이 지정하십시오.
이것이 올바르지 않다면 무엇이 기본값인지 확신 할 수 없지만 v를 놓친 이메일을 검색하려고하는 이상한 오류가 발생합니다.
-
==============================
11.상태 반환시이 코드 블록을 추가하고 쿼리 문자열 개체 {}를 전달하기 만하면됩니다. JavaScript 개발자 용
상태 반환시이 코드 블록을 추가하고 쿼리 문자열 개체 {}를 전달하기 만하면됩니다. JavaScript 개발자 용
귀하의 SDK를 초기화 한 후.
1 단계 : // 로그인 상태 가져 오기
$(document).ready(function($) { FB.getLoginStatus(function(response) { statusChangeCallback(response); console.log(response); }); });
그러면 문서로드를 확인하고 사용자가 로그인했는지 여부를 확인합니다.
그런 다음 checkLoginState 함수가 호출되고 응답은 statusChangeCallback에 전달됩니다.
function checkLoginState() { FB.getLoginStatus(function(response) { statusChangeCallback(response); }); }
2 단계 : 상태에서 응답 데이터 가져 오기
function statusChangeCallback(response) { // body... if(response.status === 'connected'){ // setElements(true); let userId = response.authResponse.userID; // console.log(userId); console.log('login'); getUserInfo(userId); }else{ // setElements(false); console.log('not logged in !'); } }
여기에는 또한 변수로 설정된 사용자 ID가 있으며, getUserInfo func가 호출되어 Graph-api를 사용하여 사용자 정보를 가져옵니다.
function getUserInfo(userId) { // body... FB.api( '/'+userId+'/?fields=id,name,email', 'GET', {}, function(response) { // Insert your code here // console.log(response); let email = response.email; loginViaEmail(email); } ); }
인수로 사용자 ID를 전달한 후 함수는 해당 사용자 ID와 관련된 모든 정보를 가져옵니다. 참고 : 필자의 경우 이메일을 찾고 있었는데, 이메일로만 로그인 할 수있는 기능을 실행할 수있었습니다.
// 이메일을 통해 로그인
function loginViaEmail(email) { // body... let token = '{{ csrf_token() }}'; let data = { _token:token, email:email } $.ajax({ url: '/login/via/email', type: 'POST', dataType: 'json', data: data, success: function(data){ console.log(data); if(data.status == 'success'){ window.location.href = '/dashboard'; } if(data.status == 'info'){ window.location.href = '/create-account'; } }, error: function(data){ console.log('Error logging in via email !'); // alert('Fail to send login request !'); } }); }
from https://stackoverflow.com/questions/3611682/facebook-graph-api-how-to-get-users-email by cc-by-sa and MIT license
'PHP' 카테고리의 다른 글
내 PHP 앱에서 404 오류를 보내지 않는 이유는 무엇입니까? (0) | 2018.09.20 |
---|---|
PHP 클래스에 코드를 포함 할 수 있습니까? (0) | 2018.09.20 |
PHP의`post_max_size`를 능가하는 파일을 정상적으로 처리하는 방법은 무엇입니까? (0) | 2018.09.20 |
함수가 정의 된 위치를 찾는 방법은 무엇입니까? (0) | 2018.09.20 |
false 일 때 거짓을 반향하도록 bool 가져 오기 (0) | 2018.09.20 |