0

Я пытаюсь интегрировать Yii2 EAuth для интеграции с facebook login.Как получить идентификатор электронной почты facebook от Nodge/yii2-eauth

Я сделал configaration * в модели я использую ниже код

public static function findIdentity($id) { 
     if (Yii::$app->getSession()->has('user-'.$id)) { 
      return new self(Yii::$app->getSession()->get('user-'.$id)); 
     } 
     else { 
      return isset(self::$users[$id]) ? new self(self::$users[$id]) : null; 
     } 
    } 

    /** 
    * @param \nodge\eauth\ServiceBase $service 
    * @return User 
    * @throws ErrorException 
    */ 
    public function findByEAuth($service) { 

     if (!$service->getIsAuthenticated()) { 
      throw new ErrorException('EAuth user should be authenticated before creating identity.'); 
     } 

     $id = $service->getServiceName().'-'.$service->getId(); 

     // echo $id;exit; 

     print_r($service->getAttribute('email')); 

     echo '<pre>'; 

     print_r($service->getAttributes()); 
     exit; 



     $attributes = array(
      'id' => $id, 
      'username' => $service->getAttribute('name'), 
      'authKey' => md5(@$id), 
      'profile' => $service->getAttributes(), 
     ); 


     $attributes['profile']['service'] = $service->getServiceName(); 
     Yii::$app->getSession()->set('user-'.$id, $attributes); 
     return new self($attributes); 
    } 

я хочу электронную почту, пожалуйста любой может помочь мне получить facebook электронный идентификатор ... заранее спасибо ......

ответ

1

Мне удалось получить электронное письмо пользователя из facebook после изменения нескольких настроек в поставщике \ nodge \ yii2-eauth \ src \ services \ FacebookOAuth2Service.php.

Редактировать FacebookOAuth2Service.php

Override protected $scopes = array(self::SCOPE_EMAIL);

и модифицировать fetchAttributes функции(). Это должно выглядеть так:

protected function fetchAttributes() 
    { 
      $info = $this->makeSignedRequest('me'); 

      $this->attributes['id'] = $info['id']; 
      $this->attributes['name'] = $info['name']; 
      $this->attributes['url'] = $info['link']; 
      $this->attributes['email'] = $info['email']; 

      return true; 
    } 

Постарайтесь, чтобы это работало для вас.