Facebook Graph API, 사용자 이메일 받는 방법?
Graph API를 사용하고 있는데 로그인한 사용자의 이메일 주소를 얻는 방법을 알 수 없습니다.
Graph의 도입부에는 "Graph API를 통해 이름, 이메일 주소, 프로필 사진, 생일 등 일반적으로 사이트에 등록하는 모든 기본 계정 등록 데이터에 액세스할 수 있습니다."라고 기재되어 있습니다.
좋아요, 하지만 그 정보에 어떻게 접근하죠?
지금까지 제가 알아낸 건 다음과 같습니다.
$json = $facebook->api('/me');
$first = $json['first_name']; // gets first name
$last = $json['last_name'];
사용자의 전자 메일 주소를 얻는 유일한 방법은 전자 메일 필드에 확장 권한을 요청하는 것입니다.사용자는 이를 볼 수 있도록 허용해야 하며 사용자의 친구의 전자 메일 주소를 얻을 수 없습니다.
http://developers.facebook.com/docs/authentication/permissions
Facebook Connect를 사용하는 경우 호출의 get 문자열에 있는 scope=email을 Auth Dialog로 전달하여 이 작업을 수행할 수 있습니다.
Oauth 인증이 훨씬 쉬워지므로 file_get_contents 대신 SDK를 사용하는 것이 좋습니다.
// 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']
);
base_facebook을 엽니다. Add function php function함 、 Access _ token 。getLoginUrl()
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'));
}
상태 반환 시 이러한 코드 블록을 추가하고 쿼리 문자열 개체 {} 전달을 시작하십시오.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 !');
}
}
또한 이 userid는 변수로 설정되며 getUserInfo 펑크가 호출되어 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);
}
);
}
userid를 인수로 전달하면 함수는 해당 userid와 관련된 모든 정보를 가져옵니다.주의: 제 경우 이메일을 찾고 있었습니다.이메일만으로 사용자를 기록할 수 있는 기능을 실행할 수 있도록 하기 위해서입니다.
// 이메일로 로그인
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 !');
}
});
}
이메일을 .email
허가.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;
}
}
않은 로그인 하여 " " " 를 할 수 .email
추가:
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
manager.manager로 하다
도움이 되었으면 좋겠다!
로그인한 사용자의 프로파일에서 이메일 주소를 검색할 수 있습니다.여기 코드 조각이 있습니다.
<?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"]);
}
?>
사용자가 앱에서 로그인하고 유효한 토큰이 있을 때 이메일 권한을 요청했다고 가정하면,
fetch api를 사용하면
const token = "some_valid_token";
const response = await fetch(
`https://graph.facebook.com/me?fields=email&access_token=${token}`
);
const result = await response.json();
결과는 다음과 같습니다.
{
"id": "some_id",
"email": "name@example.org"
}
id는 반환됩니다.
필드에 쿼리 매개 변수를 추가할 수 있지만 공용 프로필에 없는 경우(이름은 공용) 해당 매개 변수에 대한 권한이 필요합니다.
?fields=name,email,user_birthday&token=
https://developers.facebook.com/docs/facebook-login/permissions
먼저 Facebook Developer Center에서 어플리케이션을 활성화합니다.개발 모드의 애플리케이션은 전자 메일필드를 취득할 수 없습니다.
사용자가 로그인하지 않은 경우 로그인하여 응용 프로그램/사이트에 전자 메일필드가 필요함을 지정해야 합니다.
FB.login(
function(response) {
console.log('Welcome!');
},
{scope: 'email'}
);
그런 다음 로그인 후 또는 사용자가 이미 로그인이 되어 있는 경우 Facebook API를 사용하여 다음 필드 전자 메일을 가져옵니다.
FB.api('/me', {fields: 'name,email'}, (response) => {
console.log(response.name + ', ' + response.email);
console.log('full response: ', response);
});
는 현재 로그인한 사용자에 대한 정보를 제공하지만 oauth 토큰을 제공해야 합니다.참조:
http://developers.facebook.com/docs/reference/api/user
프로파일의 이메일은 확장 권한을 사용하여 취득할 수 있지만 fb 로그인에 사용하는 이메일은 취득할 수 없는 것 같습니다.제 앱에서는 사용자의 여러 fb 계정을 목록으로 표시하고 싶었고, 각 계정의 고유 식별자로 fb 계정의 로그인 메일을 표시하고 싶었지만 fb에서 지울 수 없었습니다.사용자 프로파일의 프라이머리 메일뿐이었습니다만, 로그인 메일과 프라이머리 메일은 다릅니다.
Facebook 어플리케이션이 공개되어 있는지 확인합니다.이메일, public_profile 및 user_friends 데이터를 수신하려면 앱을 공개해야 합니다.
나중에 개발 목적으로 사용하지 않도록 설정해도 전자 메일 필드를 계속 사용할 수 있습니다.
개발 중에 도움이 될 수 있는 툴은 다음과 같습니다.
액세스 토큰 디버거: 자세한 내용을 보려면 액세스 토큰에 붙여넣기
https://developers.facebook.com/tools/debug/accesstoken/
그래프 API 탐색기:액세스 토큰에 붙여넣은 후 그래프 API에 대한 요청을 테스트합니다.
https://developers.facebook.com/tools/explorer
API 버전 번호를 다음과 같이 완전히 지정하십시오."v2.11"
가 아니라"2.11"
잘못된 경우 기본값이 무엇인지 알 수 없습니다. 그러나 이메일을 검색하려고 할 때 몇 가지 이상한 오류가 발생했습니다.v
.
PHP측(getGraphUser() 메서드)에서 사용자의 이메일 주소를 수집할 때의 문제는 (WEBSIDE측에서 xfbml=1로 작성된) 기본 동작은 "email"을 포함하지 않는 스코프로 FB.login()을 호출하는 것입니다.
즉, 다음과 같습니다.
1) 전화
FB.login(...., {범위: 이메일})
로그인 프로세스를 시작하기 위한 자체 버튼 만들기
또는
2) xfbml 버튼에 scope="email" 속성을 추가합니다.
<div class="fb-class-button" data-size="large" data-button-type="class_with" data-layout="data-auto-logout-link="false" data-use-as-as-true" data-width="1000px" scope="email"></div>
PHP 측에서 이메일 주소를 수집할 수 있습니다.
도움이 됐으면 좋겠다.
언급URL : https://stackoverflow.com/questions/3611682/facebook-graph-api-how-to-get-users-email
'programing' 카테고리의 다른 글
포크와 exec의 차이점 (0) | 2022.09.15 |
---|---|
필드당 여러 GSON @SerializedName? (0) | 2022.09.15 |
String.replaceAll(RegEx 제외) (0) | 2022.09.15 |
키 값 쌍이 있는 array_param() (0) | 2022.09.15 |
웹 팩을 사용하여 정적 파일을 빌드 디렉토리에 복사하는 방법 (0) | 2022.09.15 |