yii2 不同域名下进行授权登录
/** * 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>'); }