Yii2 authclient 不返回用户的电子邮件 ID

标签 yii2 yii-components yii2-advanced-app

我正在使用 yii2-authclient 登录我的网站,收到这样的回复

yii\authclient\clients\Facebook Object ( [authUrl] => https://www.facebook.com/dialog/oauth?display=popup [tokenUrl] => https://graph.facebook.com/oauth/access_token [apiBaseUrl] => https://graph.facebook.com [scope] => email [version] => 2.0 [clientId] => *******[clientSecret] => ********[_returnUrl:yii\authclient\BaseOAuth:private] => http://www.usermodule.com/index.php?r=site%2Fauth&authclient=facebook [_curlOptions:yii\authclient\BaseOAuth:private] => Array ( ) [_accessToken:yii\authclient\BaseOAuth:private] => yii\authclient\OAuthToken Object ( [tokenParamKey] => access_token [tokenSecretParamKey] => oauth_token_secret [createTimestamp] => 1436772538 [_expireDurationParamKey:yii\authclient\OAuthToken:private] => [_params:yii\authclient\OAuthToken:private] => Array ( [access_token] => ****************************** [expires] => 5182933 ) ) [_signatureMethod:yii\authclient\BaseOAuth:private] => Array ( ) [_id:yii\authclient\BaseClient:private] => facebook [_name:yii\authclient\BaseClient:private] => [_title:yii\authclient\BaseClient:private] => [_userAttributes:yii\authclient\BaseClient:private] => [_normalizeUserAttributeMap:yii\authclient\BaseClient:private] => [_viewOptions:yii\authclient\BaseClient:private] => [_events:yii\base\Component:private] => Array ( ) [_behaviors:yii\base\Component:private] => ) Array ( [name] => **** [id] => *****)

这是我的配置

 'authClientCollection' => [
    'class' => 'yii\authclient\Collection',
    'clients' => [
        'facebook' => [
            'class' => 'yii\authclient\clients\Facebook',              
            'clientId' => '***',
            'clientSecret' => '****',

        ],
    ],
]

我能够获取用户名、用户 ID,但不能获取用户电子邮件 ID,为什么?我还应该做什么?

最佳答案

是的,终于得到了解决方案,

当您发出图形 API 请求时

$this->makeSignedRequest('me');

替换为

$this->makeSignedRequest('me?fields=id,name,email');

要么你正在使用 facebook sdk,要么像我一样使用 yii2-eauth 扩展。 如果你正在使用 yii2-eauth 那么你需要在 vendor/nodge/yii2-eauth/src/services/FacebookOAuth2Service.php 中更改它

然后添加这一行来读取电子邮件属性

$this->attributes['email'] = $info['email'];

注意:我试过 yii 传递参数的方式,比如

$this->makeSignedRequest('me',array('fields'=>'id,email');

对我不起作用。

解决方案来源: https://developers.facebook.com/docs/php/howto/example_retrieve_user_profile/5.0.0

关于Yii2 authclient 不返回用户的电子邮件 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31377753/

相关文章:

php - Yii 用户身份验证和 session 不起作用

具有多个 Controller 的 Yii2 Rest API 额外模式

javascript - Yii2 和 Ajax : The response is not the SQL query results

php - 如何在 yii2 中向 sql 表的现有值添加值?

api - Yii2 API 身份验证 Behaviours() 不起作用

php - Yii2:加载 Controller 时如何减少行为()数据库查询?

Yii2 Basic - 我如何在 yii2 操作中使用常用功能

php - 在 yii 1.1 中使用 MYsql 创建表

internationalization - Yii2在翻译字符串中渲染html标签

php - 如何安装基于yii的github项目