码迷,mamicode.com
首页 > 其他好文 > 详细

yii2单点接入ucenter(原创)

时间:2019-02-25 18:59:49      阅读:221      评论:0      收藏:0      [点我收藏+]

标签:pac   prim   rop   mamicode   应用   def   单点   set   userinfo   

1.第一步

在中心端添加应用,此处略去,根据官方文档即可实现.

第二步.

用户表如下,基本用原生的用户表即可,取决于你的ucenter主机服务端传送什么用户信息:

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for user
-- ----------------------------
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
`id` int(20) UNSIGNED NOT NULL AUTO_INCREMENT,
`username` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT 用户名,
`password_hash` varchar(80) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT 密码,
`password_reset_token` varchar(60) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT 密码token,
`email` varchar(60) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT 邮箱,
`auth_key` varchar(60) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`status` tinyint(5) NULL DEFAULT 1 COMMENT 0禁用 1启用,
`created_at` int(18) NULL DEFAULT NULL COMMENT 创建时间,
`updated_at` int(18) NULL DEFAULT NULL COMMENT 更新时间,
`realname` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT 真实名称,
`user_id` int(11) NULL DEFAULT NULL COMMENT 统一登录用户id,
`dep_id` int(11) NULL DEFAULT NULL COMMENT 部门id,
`title` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`nickname` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT 昵称,
PRIMARY KEY (`id`) USING BTREE,
UNIQUE INDEX `username`(`username`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 72 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = 后台用户表 ROW_FORMAT = Compact;

SET FOREIGN_KEY_CHECKS = 1;

 

第三步:

yii2在配置文件加入:

    components => [
      ...
        ucenter => [
            class => yii\lyuser\Client,
            baseUrl => http://www-test.lanyife.com.cn/passport,
            appKey => medusa,
            appSecret => 1f13f6b2508b03b25dc1088588bef3eb,
            jumpUrl => "http://{$_SERVER[‘HTTP_HOST‘]}/site/login",
            url => "http://{$_SERVER[‘HTTP_HOST‘]}",
        ],
     ...
    ],

 

第四步:

在默认控制器里这么改造

<?php
namespace backend\controllers;

use Yii;
use yii\helpers\Url;
use yii\web\Controller;
use yii\filters\VerbFilter;
use yii\filters\AccessControl;
use common\models\LoginForm;
use common\models\User;
use yii\web\Response;

/**
 * Site controller
 */
class SiteController extends Controller
{
    /**
     * {@inheritdoc}
     */
    public function behaviors()
    {
        return [
            verbs => [
                class => VerbFilter::className(),
                actions => [
                    delete => [POST],
                ],
            ],
        ];
    }

    /**
     * {@inheritdoc}
     */
    public function actions()
    {
        return [
            error => [
                class => yii\web\ErrorAction,
            ],
        ];
    }

    /**
     * Displays homepage.
     *
     * @return string
     */
    public function actionIndex()
    {
        if(yii::$app->user->isGuest){
            return $this->redirect(Url::toRoute(site/login));
        }
        return $this->render(index);
    }

    /**
     * Login action.
     *
     * @return string
     */
    public function actionLogin()
    {
        if( \Yii::$app->user->isGuest ){
            return \Yii::$app->ucenter->goLogin();
        }
        $this->redirect(/);

    }



    /**
     * 同步登录
     * @return string
     */
    public function actionSyncLogin()
    {
        $r = \Yii::$app->ucenter->synLogin();

//        \Yii::$app->response->format = Response::FORMAT_JSONP;
        if ($r) {
            if (\Yii::$app->request->get(action) == login) {
                //获取登录用户信息
                $userInfo = \Yii::$app->ucenter->getUserInfo();
                file_put_contents(/tmp/77.log,json_encode($userInfo).date(y-m-d H:i:s)  );
                if (empty($userInfo)) {
                    return false;
                }
                $res =  $this->_loginOrRegister($userInfo);

                if($res){
                    $user = User::findOne([username=>$userInfo[username] ]);
                    \Yii::$app->getUser()->login($user, 86400);
                }

            }

            \Yii::$app->response->content = login(1);
        } else {
            \Yii::$app->response->content = login(0);
        }
        \Yii::$app->response->send();
        \Yii::$app->end();
    }



    //注销
    public function actionLogout()
    {
        //本地 注销
        Yii::$app->user->logout();
        // Yii::$app->getUser()->logout();
        //跳转UCenter注销页面 $callback 注销返回的url

        \Yii::$app->ucenter->goLogout(\Yii::$app->ucenter->jumpUrl);
    }


    /**
     * 第一次登录或者多次登录,实现信息同步并注册
     * @param array $userInfo
     * @return bool
     */
    private function _loginOrRegister($userInfo)
    {


        if (empty($userInfo)||!isset($userInfo[username])) {
            return false;
        }

        $user = User::findOne([username=>$userInfo[username]]);
        if (empty($user)) {
            //保存创建本地新用户
             $res =  yii::$app->db->createCommand()->insert(user,[
                username => $userInfo[username],
                auth_key=> $userInfo[auth_key],
                realname =>$userInfo[realname],
                user_id => $userInfo[id],
                dep_id => $userInfo[dep_id],
                status => $userInfo[status],
                created_at =>$userInfo[created_at],
                updated_at=> $userInfo[updated_at],
                email =>$userInfo[email],
                title =>$userInfo[title],
                nickname => $userInfo[nickname],
          //模型User的激活状态要定义,比如我
          //见下图
                status => User::STATUS_ACTIVE,
                 password_hash=>Yii::$app->security->generatePasswordHash(123456)
            ])->execute();
        } else {
            yii::$app->db->createCommand()->update(user,[user_id=>$userInfo[id]] ,[
                dep_id => $userInfo[dep_id],
                realname => $userInfo[realname],
                updated_at => $userInfo[updated_at],
                title => $userInfo[title],
            ])->execute();
        }

        return true;
    }



}

 

技术图片

 

yii2单点接入ucenter(原创)

标签:pac   prim   rop   mamicode   应用   def   单点   set   userinfo   

原文地址:https://www.cnblogs.com/wenhainan/p/10432011.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!