У стандартного клиента yii2 для логина через соцсети yii2-authclient есть замечательный простой плагин для github.
Как и у всех многих таких GitHub-OAuth клиентов, вместе с пользовательской информацией не приходит email. Это особенность непосредственно GitHub-a(http://stackoverflow.com/questions/24689889/the-accounts-github-package-is-causing-my-meteor-user-to-have-a-null-email).
Решается это просто.
В конфиге authClient добавляем нужный нам scope:
1 2 3 4 5 6 7 8 9 10 11 |
'authClientCollection' => [ 'class' => 'yii\authclient\Collection', 'clients' => [ 'github' => [ 'class' => 'yii\authclient\clients\GitHub', 'clientId' => 'YOUR_CLIENT_ID', 'clientSecret' => 'YOUR_SECRET', 'scope' => 'user' // user включает в себя требуемый user:email ], ], ], |
В successCallback-функции делаем дополнительный API вызов на получение email-адресов(https://developer.github.com/v3/users/emails/#list-email-addresses-for-a-user):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
public function successCallback($client) { $attributes = $client->getUserAttributes(); // getting user email try { $emails = $client->api('user/emails'); foreach ($emails as $email) { if ($email['primary'] === true) { $attributes['email'] = $email['email']; } } } catch (\yii\authclient\InvalidResponseException $e) { // no email :-( } // do other stuff with our data! } |
Собственно теперь, если API вызов прошёл успешно – в $attributes будет долгожданный email.