Как получить почту от Yii-eauth?
Я использую Yii-eauth для входа в систему. https://github.com/Nodge/yii-eauth Теперь я получаю имя пользователя по
Yii::app()->user->name.
Я хочу также получить электронную почту пользователя opf. Как это сделать в Yii 1.1 . Спасибо заранее
2 ответа
В вашем защищенном / componentenets/UserIdentity.php файле вам нужно добавить электронную почту пользователя в сеанс следующим образом:-
$this->setState('email_of_user',$users->email);
Вы можете использовать и получить доступ к этой переменной email_of_user через echo Yii::app()->user->email_of_user
Если этот код не работает для вас, вам нужно внести следующие изменения в ваши файлы:-
В вашей модели / LoginForm.php,
заменить эту функцию,
public function actionLogin() {
$serviceName = Yii::app()->request->getQuery('service');
if (isset($serviceName)) {
/** @var $eauth EAuthServiceBase */
$eauth = Yii::app()->eauth->getIdentity($serviceName);
$eauth->redirectUrl = Yii::app()->user->returnUrl;
$eauth->cancelUrl = $this->createAbsoluteUrl('site/login');
try {
if ($eauth->authenticate()) {
//var_dump($eauth->getIsAuthenticated(), $eauth->getAttributes());
$identity = new EAuthUserIdentity($eauth);
// successful authentication
if ($identity->authenticate()) {
Yii::app()->user->login($identity);
//var_dump($identity->id, $identity->name, Yii::app()->user->id);exit;
// special redirect with closing popup window
$eauth->redirect();
}
else {
// close popup window and redirect to cancelUrl
$eauth->cancel();
}
}
// Something went wrong, redirect to login page
$this->redirect(array('site/login'));
}
catch (EAuthException $e) {
// save authentication error to session
Yii::app()->user->setFlash('error', 'EAuthException: '.$e->getMessage());
// close popup window and redirect to cancelUrl
$eauth->redirect($eauth->getCancelUrl());
}
}
// default authorization code through login/password ..
}
В вашем защищенном файле / componentenets/UserIdentity.php:-
заменить эту строку
class UserIdentity extends CUserIdentity
в
class UserIdentity extends EAuthUserIdentity
Надеюсь, этот код будет работать для вас:)
Мне удалось получить адрес электронной почты от linkedin.
Есть класс для входа в LinkedIn
Изменить $scope
переменная, чтобы получить адрес электронной почты.
Также настройте параметры на странице приложения LinkedIn.
protected $scope = 'r_basicprofile r_emailaddress'; // 'r_fullprofile r_emailaddress';
Кроме того, добавить email-address
чтобы подписать запрос, как это:
$info = $this->makeSignedRequest('http://api.linkedin.com/v1/people/~:(id,first-name,last-name,public-profile-url,email-address,positions)', array(), false); // json format not working :(
$info = $this->parseInfo($info);
Теперь ваш $info
буду иметь email-address
для тебя.
У Facebook также есть решение, подобное этому.