Facebook -Graph -API, wie kann ich Benutzer zu E -Mails erhalten?
-
26-09-2019 - |
Frage
Ich verwende die Graph-API, kann aber nicht herausfinden, wie man eine protokollierte Benutzer-E-Mail-Adresse erhält.
Das Intro-to-Graph-Status "Die Graph-API kann Zugriff auf alle grundlegenden Kontoregistrierungsdaten bieten, die Sie normalerweise in einem Anmeldeformular für Ihre Website anfordern, einschließlich Name, E-Mail-Adresse, Profilbild und Geburtstag."
Alles gut und gut, aber wie greife ich auf diese Informationen zu?
Das habe ich bisher:
$json = $facebook->api('/me');
$first = $json['first_name']; // gets first name
$last = $json['last_name'];
Lösung
Die einzige Möglichkeit, die E-Mail-Adresse der Benutzer zu erhalten, besteht darin, erweiterte Berechtigungen im Feld E-Mail anzufordern. Der Benutzer muss Ihnen erlauben, dies zu sehen, und Sie können die E-Mail-Adressen der Freunde des Benutzers nicht erhalten.
http://developers.facebook.com/docs/authentication/permissions
Sie können dies tun, wenn Sie Facebook Connect verwenden, indem Sie Scope = E -Mail in der GET -Zeichenfolge Ihres Anrufs an den Auth -Dialog übergeben.
Ich würde empfehlen, eine zu verwenden SDK Anstelle von File_Get_Contents, da es die Ausführung der Ausführung der Ausführung der Ausführung OAuth Authentifizierung.
Andere Tipps
// 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']
);
Öffnen Sie Base_facebook.php Access_Token bei der Funktion hinzufügen getLoginUrl()
array_merge(array(
'access_token' => $this->getAccessToken(),
'client_id' => $this->getAppId(),
'redirect_uri' => $currentUrl, // possibly overwritten
'state' => $this->state),
$params);
und verwenden Sie den Bereich für die E -Mail -Berechtigung
if ($user) {
echo $logoutUrl = $facebook->getLogoutUrl();
} else {
echo $loginUrl = $facebook->getLoginUrl(array('scope' => 'email,read_stream'));
}
Um die Benutzer -E -Mail zu erhalten, müssen Sie sich im Benutzer mit seinem Facebook -Konto mit dem anmelden email
Genehmigung. Verwenden Sie dafür das Facebook PHP SDK (Siehe auf Github) wie folgt.
Überprüfen Sie zunächst, ob der Benutzer bereits angemeldet ist:
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;
}
}
Wenn er nicht ist, können Sie den Login -Link anzeigen und nach dem fragen email
Genehmigung :
if (!$user) {
$args = array('scope' => 'email');
echo '<a href="' . $facebook->getLoginUrl() . '">Login with Facebook</a>';
} else {
echo '<a href="' . $facebook->getLogoutUrl() . '">Logout</a>';
}
Wenn er in der E -Mail angemeldet ist $user_profile
Array.
Ich hoffe, das hilft !
Sie können die E -Mail -Adresse aus dem profile angemeldeten Benutzer abrufen. Hier ist der Code -Snippet
<?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"]);
}
?>
Fügen Sie diesen Codeblock einfach bei der Statusrückgabe hinzu und übergeben Sie ein Abfragestnungsobjekt {}. Für JavaScript Devs
Nach dem Initialisieren Ihres SDK.
Schritt 1: // Anmeldestatus erhalten
$(document).ready(function($) {
FB.getLoginStatus(function(response) {
statusChangeCallback(response);
console.log(response);
});
});
Dadurch wird das Laden von Dokumenten überprüft und Ihre Anmeldestatusprüfung abgerufen, wenn Benutzer angemeldet wurden.
Dann die Funktion Checkloginstate wird aufgerufen, und die Antwort ist übergeben auf StatuschangeCallback
function checkLoginState() {
FB.getLoginStatus(function(response) {
statusChangeCallback(response);
});
}
Schritt 2: Lassen Sie die Antwortdaten aus dem Status abrufen
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 !');
}
}
Dies hat auch das Benutzeridentifikation welches auf variabel eingestellt wird, dann a GetUserinfo Func wird aufgerufen, um Benutzerinformationen mit dem Graph-API abzurufen.
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);
}
);
}
Nach dem Bestehen der Benutzeridentifikation Als Argument holt die Funktion dann alle Informationen darüber ab Benutzeridentifikation. HINWEIS: In meinem Fall suchte ich nach der E -Mail, um mir eine Funktion ausführen zu können, die nur per E -Mail angemeldet ist.
// Melden Sie sich per E -Mail an
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 !');
}
});
}
Geben Sie Informationen über den aktuell angemeldeten Benutzer, aber Sie müssen ein OAuth-Token liefern. Sehen:
Die E -Mail im Profil kann mit der erweiterten Berechtigung erhalten werden, aber ich denke, es ist nicht möglich, die E -Mail zum Login -FB zu erhalten. In meiner App wollte ich mulitple FB -Konten eines Benutzers in einer Liste anzeigen. Ich wollte die Anmelde -E -Mails von FB -Konten als eindeutige Kennung der jeweiligen Konten anzeigen, aber ich konnte es nicht von FB ausziehen, alles was ich bekam, war alles Die primäre E -Mail im Benutzerprofil, aber in meinem Fall sind meine Anmeldem -E -Mail und meine primäre E -Mail unterschiedlich.
Stellen Sie sicher, dass Ihre Facebook -Anwendung veröffentlicht wird. Um Daten für E -Mails zu erhalten, muss Ihre App der Öffentlichkeit zur Verfügung gestellt werden.
Sie können es später für Entwicklungszwecke deaktivieren und dennoch ein E -Mail -Feld erhalten.
Die folgenden Tools können während der Entwicklung nützlich sein:
Zugriff auf Token -Debugger: Einfügen in einem Zugangstoken für Details
https://developers.facebook.com/tools/debug/accessToken/
Graph API Explorer: Testeranfragen an die Graph -API nach dem Einfügen in Ihrem Zugriffstoken
Stellen Sie sicher "v2.11"
und nicht "2.11"
Ich bin mir nicht sicher, was es standardmäßig ist, wenn dies falsch ist, aber ich habe einige seltsame Fehler bekommen, um die E -Mail einfach abzurufen v
.