Como fazer uma permissão de e-mail necessária ao fazer login / assinar um usuário usando o login FB?

Não consigo fazer a permissão de e-mail necessária.

Se um usuário soltar o email usando o login do FB, meu código é quebrado. E quando tento escrever código em torno deste problema (tente avisar o usuário para aceitar o requisito de permissão de e-mail). Ele não funcionará; o usuário teria que revogar o access da aplicação manualmente em suas configurações de FB, e isso está obviamente fora de questão.

Então, como posso fazer a permissão de e-mail necessária como parte do meu aplicativo / site?

Tbh, eu não consegui ler todos os documentos da API do Facebook sem me cobrir a cabeça.

Aqui está o que tenho atualmente:

var $user = null; function __construct() { //blahblahlblah //blahblahblah (Code needed for facebook login to work) $this->user = $this->facebook->getUser(); if ($this->user) { try { // Proceed knowing you have a logged in user $this->user = $this->facebook->api('/me'); $this->logoutUrl = $this->facebook->getLogoutUrl( array('next' => base_url() . 'connect/logout') ); } catch (FacebookApiException $e) { error_log($e); $this->user = null; } } } function process() { // If the Facebook user allows his/her email to be shared. // [If they don't, skip to the `else` statement below] if (isset($this->user['email'])) { //Great! I can process normally } // If the Facebook user doesn't share their email. else { //What do I do here? //I'm not sure how the OAuth works, so that's why im checking echo 'email is required. line 86 , connect.php controller'; } } 

Você deve verificar o token de access recebido antes de continuar com a lógica do aplicativo. Como isso é descrito aqui:

https://developers.facebook.com/docs/facebook-login/permissions/v2.0#checking

Se você reconhecer que o Usuário não deu a permissão de emailemail , você pode reenviar o diálogo de permissão como descrito aqui:

https://developers.facebook.com/docs/facebook-login/permissions/v2.0#handling

Citar:

Se alguém recusou uma permissão para o seu aplicativo, a checkbox de diálogo de login não permitirá que seu aplicativo re-solicite a permissão, a menos que você passe auth_type=rerequest juntamente com sua solicitação.

usando o Facebook php sdk

 require_once 'facebook-sdk/facebook.php'; $config = array ( 'appId' => 'your id', 'secret' => 'your secret', 'fileUpload' => false, 'allowSignedRequest' => false ); $facebook = new Facebook ( $config ); $fb_user_id = $facebook->getUser (); $fb_params = array ( 'scope' => 'email, publish_stream' ); 

e gere URL de login para seus usuários

 if (empty ( $fb_user_id )) { $fb_login_url = $facebook->getLoginUrl ( $fb_params ); }