我在yii项目中使用yii eauth extension通过社交帐户登录。我也阅读了github和russian version的文档,但我不明白如何使用该扩展。也许那段代码:
$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/sociallogin');
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/login2'));
$this->render('login2', array());
}
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 ..
$this->render('login2', array());
问题:
1)$eauth->authenticate()
和$identity->authenticate()
之间有什么区别?
2)保存登录用户设置的“用户”表在哪里?
我已经阅读了这个simular question,这不是我需要的。对不起,如果我提出简单的问题,但我真的需要帮助!提前感谢您的任何回复!
答案 0 :(得分:1)
试
$serviceName = Yii::$app->getRequest()->getQueryParam('service');
if (isset($serviceName)) {
/** @var $eauth \nodge\eauth\ServiceBase */
$eauth = Yii::$app->get('eauth')->getIdentity($serviceName);
$eauth->setRedirectUrl(Yii::$app->getUser()->getReturnUrl());
$eauth->setCancelUrl(Yii::$app->getUrlManager()->createAbsoluteUrl('site/sociallogin'));
try {
if ($eauth->authenticate()) {
$identity = User::findByEAuth($eauth);
Yii::$app->getUser()->login($identity);
// special redirect with closing popup window
$eauth->redirect();
}
else {
// close popup window and redirect to cancelUrl
$eauth->cancel();
}
}
catch (\nodge\eauth\ErrorException $e) {
// save error to show it later
Yii::$app->getSession()->setFlash('error', 'EAuthException: '.$e->getMessage());
$eauth->redirect($eauth->getCancelUrl());
}
}
答案 1 :(得分:0)
回答你的问题。
1)$ eauth-> authenticate()和$ identity-> authenticate()之间有什么区别?
The EAuth extension allows to authenticate users with accounts on other websites.
这是demo。我们通过使用您的Facebook帐户登录了很多。
支持的协议:OpenID,OAuth 1.0和OAuth 2.0。
EAuth是一个扩展,用于提供统一(不依赖于所选服务)方法来验证用户。因此,扩展名本身不会执行登录,不会注册用户,也不会绑定来自不同提供商的用户帐户。
2)保存登录用户设置的“用户”表在哪里?
这当然会因项目而异,因为我的项目没有当前登录的用户,但您可以将其添加到项目中。