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>');
    }

  

posted on 2017-02-08 17:55  郑州名扬  阅读(639)  评论(0编辑  收藏  举报

导航