Saya menggunakan API Grafik, tetapi saya tidak tahu cara mendapatkan alamat email pengguna yang masuk.
Pengantar Grafik menyatakan "API Grafik dapat memberikan akses ke semua data pendaftaran akun dasar yang biasanya Anda minta dalam formulir pendaftaran untuk situs Anda, termasuk nama, alamat email, gambar profil, dan tanggal lahir"
Semuanya baik dan bagus, tapi bagaimana cara mengakses info itu?
Inilah yang saya miliki sejauh ini:
$json = $facebook->api('/me');
$first = $json['first_name']; // gets first name
$last = $json['last_name'];
php
json
facebook
facebook-graph-api
kylex
sumber
sumber
var_dump($obj);
keluaran?Jawaban:
Satu-satunya cara untuk mendapatkan alamat email pengguna adalah dengan meminta perpanjangan izin di bidang email. Pengguna harus mengizinkan Anda untuk melihat ini dan Anda tidak bisa mendapatkan alamat email teman pengguna.
http://developers.facebook.com/docs/authentication/permissions
Anda dapat melakukan ini jika Anda menggunakan Facebook connect dengan meneruskan scope = email di string get panggilan Anda ke Auth Dialog.
Saya akan merekomendasikan menggunakan SDK daripada file_get_contents karena membuatnya jauh lebih mudah untuk melakukan otentikasi Oauth .
sumber
FB.api('/me?scope=email', function(apiResponse) { ... });
// 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'] );
sumber
/me
rute tersebut? Saya terus menelusuri halaman-halaman di Graph API dan tidak dapat menemukannya di mana pun :(Buka base_facebook.php Tambahkan Access_token di fungsi
getLoginUrl()
array_merge(array( 'access_token' => $this->getAccessToken(), 'client_id' => $this->getAppId(), 'redirect_uri' => $currentUrl, // possibly overwritten 'state' => $this->state), $params);
dan Gunakan cakupan untuk Izin Email
if ($user) { echo $logoutUrl = $facebook->getLogoutUrl(); } else { echo $loginUrl = $facebook->getLoginUrl(array('scope' => 'email,read_stream')); }
sumber
Untuk mendapatkan email pengguna, Anda harus memasukkan pengguna dengan akun Facebook-nya menggunakan
email
izin. Gunakan untuk itu Facebook PHP SDK ( lihat di github ) sebagai berikut.Pertama, periksa apakah pengguna sudah masuk:
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; } }
Jika tidak, Anda dapat menampilkan link login yang meminta
email
izin:if (!$user) { $args = array('scope' => 'email'); echo '<a href="' . $facebook->getLoginUrl() . '">Login with Facebook</a>'; } else { echo '<a href="' . $facebook->getLogoutUrl() . '">Logout</a>'; }
Ketika dia login email dapat ditemukan di
$user_profile
array.Semoga membantu!
sumber
Cukup tambahkan blok kode ini pada pengembalian status, dan mulai meneruskan objek string kueri {}. Untuk pengembang JavaScript
Setelah menginisialisasi SDK Anda.
langkah 1: // dapatkan status login
$(document).ready(function($) { FB.getLoginStatus(function(response) { statusChangeCallback(response); console.log(response); }); });
Ini akan memeriksa pemuatan dokumen dan mendapatkan status login Anda memeriksa apakah pengguna telah masuk.
Kemudian fungsi checkLoginState dipanggil, dan responsnya diteruskan ke statusChangeCallback
function checkLoginState() { FB.getLoginStatus(function(response) { statusChangeCallback(response); }); }
Langkah 2: Biarkan Anda mendapatkan data respons dari status
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 !'); } }
Ini juga memiliki userid yang disetel ke variabel, kemudian fungsi getUserInfo dipanggil untuk mengambil informasi pengguna menggunakan 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); } ); }
Setelah melewatkan userid sebagai argumen, fungsi tersebut kemudian mengambil semua informasi yang berkaitan dengan userid tersebut . Catatan: dalam kasus saya, saya sedang mencari email, untuk memungkinkan saya menjalankan fungsi yang dapat login pengguna hanya melalui email.
// masuk melalui email
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 !'); } }); }
sumber
Anda dapat mengambil alamat email dari profil pengguna yang masuk. Ini cuplikan kodenya
<?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"]); } ?>
sumber
$user_profile
tidak berisi emailDengan asumsi Anda telah meminta izin email saat pengguna masuk dari aplikasi Anda dan Anda memiliki token yang valid,
Dengan fetch api Anda bisa
const token = "some_valid_token"; const response = await fetch( `https://graph.facebook.com/me?fields=email&access_token=${token}` ); const result = await response.json();
hasilnya adalah:
{ "id": "some_id", "email": "[email protected]" }
id akan tetap dikembalikan.
Anda dapat menambahkan lebih banyak hal ke bidang kueri param, tetapi Anda memerlukan izin untuk mereka jika mereka tidak ada di profil publik (nama publik).
https://developers.facebook.com/docs/facebook-login/permissions
sumber
https://graph.facebook.com/me
akan memberi Anda info tentang pengguna yang saat ini masuk, tetapi Anda harus memberikan token oauth. Lihat:
http://developers.facebook.com/docs/reference/api/user
sumber
Email di profil dapat diperoleh menggunakan izin diperpanjang tetapi saya kira tidak mungkin untuk mendapatkan email yang digunakan untuk login fb. Di aplikasi saya, saya ingin menampilkan beberapa akun fb pengguna dalam daftar, saya ingin menampilkan email masuk akun fb sebagai pengenal unik dari masing-masing akun tetapi saya tidak bisa melepaskannya dari fb, yang saya dapatkan hanyalah email utama di profil pengguna tetapi dalam kasus saya, email untuk masuk dan email utama saya berbeda.
sumber
Pertama, aktifkan aplikasi Anda di Pusat Pengembang Facebook . Aplikasi dalam mode pengembangan tidak diizinkan untuk mengambil kolom email.
Jika pengguna tidak masuk, Anda perlu masuk dan menentukan bahwa aplikasi / situs Anda memerlukan bidang email.
FB.login( function(response) { console.log('Welcome!'); }, {scope: 'email'} );
Kemudian, setelah login, atau jika pengguna sudah login, ambil email menggunakan API Facebook, tentukan kolom email:
FB.api('/me', {fields: 'name,email'}, (response) => { console.log(response.name + ', ' + response.email); console.log('full response: ', response); });
sumber
Pastikan aplikasi Facebook Anda dipublikasikan. Untuk menerima data untuk email, public_profile dan user_friends, aplikasi Anda harus tersedia untuk publik.
Anda dapat menonaktifkannya nanti untuk tujuan pengembangan dan masih mendapatkan bidang email.
sumber
Alat berikut dapat berguna selama pengembangan:
https://developers.facebook.com/tools/debug/accesstoken/
https://developers.facebook.com/tools/explorer
sumber
Pastikan untuk sepenuhnya menentukan nomor versi API sebagai sesuatu yang disukai
"v2.11"
dan tidak"2.11"
Saya tidak yakin apa defaultnya jika ini salah, tetapi saya mendapat beberapa kesalahan aneh mencoba mengambil email ketika saya melewatkan
v
.sumber
Bagi saya masalah dengan mengumpulkan alamat email pengguna di sisi PHP (metode getGraphUser ()) adalah, bahwa perilaku default tombol yang dirender facebook (di sisi SITUS WEB, dibuat dengan xfbml = 1) adalah implikasi memanggil FB.login () dengan cakupannya TIDAK termasuk "email".
Itu artinya Anda HARUS:
1) panggilan
secara nyata, membuat tombol Anda sendiri untuk memulai proses login
ATAU
2) tambahkan atribut scope = "email" ke tombol xfbml
untuk dapat mengumpulkan alamat email di sisi PHP.
Semoga membantu.
sumber