/**
* Logs in a user.
* 如果是 第三方来进行授权登录的话 必须带上参数 type=auth return=returnUrl
* @return mixed
*/
public function actionLogin()
{
$this->setReferer();
if (!Yii::$app->user->isGuest) {
if (($type = Yii::$app->getRequest()->get('type')) && $type == 'auth') {
return $this->authCallback();
} else {
return $this->goHome();
}
}
$model = new LoginForm();
if ($model->load(Yii::$app->request->post())) {
if($model->login()){
if (($type = Yii::$app->getRequest()->get('type')) && $type == 'auth') {
return $this->authCallback();
} else {
return $this->goBack();
}
}else{
Yii::$app->session->setFlash('login-error','用户名或密码错误');
$this->redirect('login');
}
} else {
return $this->render('login', [
'model' => $model,
]);
}
}
/**
* 记录来源网址
*/
private function setReferer()
{
$currentRoute = $this->getRoute();
$referer = Yii::$app->getRequest()->getReferrer();
if(strripos($referer, $currentRoute) === false){
Yii::$app->user->setReturnUrl($referer);
}
}
/**
* 此方法被调用的前台是用户已经是登录状态了
* 授权后的回调函数
*/
private function authCallback()
{
if ($user = User::findOne(Yii::$app->user->id)) {
$returnUrl = Yii::$app->getUser()->getReturnUrl(null);
$authUrl = Yii::$app->getRequest()->get('return');
if (!User::isPasswordResetTokenValid($user->password_reset_token)) {
$user->generatePasswordResetToken();
if (!$user->save()) {
Yii::$app->session->setFlash('login-error','授权登录失败,暂时无法获取ticket');
return false;
}
}
$authUrl .= "?ticket=".$user->password_reset_token."&returnUrl=".$returnUrl;
return $this->redirect($authUrl);
}
die('<script>alert("授权出错!");window.history.go(-1);</script>');
}