0

Facebookログイン統合のためにYii2 EAuthを統合しようとしています。

私は構成を作成しました*モデルでは以下のコードを使用しています

 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);
    }

私は電子メールが欲しいです、plsは私がFacebookの電子メールIDを取得するのを手伝ってくれます...前もって感謝します......

4

1 に答える 1

1

vendor\nodge\yii2-eauth\src\services\FacebookOAuth2Service.php のいくつかの設定を変更した後、Facebook からユーザーのメールを取得することができました。

FacebookOAuth2Service.php を編集

オーバーライド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;
   }

試してみて、それがあなたのために働くことを確認してください。

于 2015-03-18T12:53:48.767 に答える