博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
yii2单点接入ucenter(原创)
阅读量:7113 次
发布时间:2019-06-28

本文共 5708 字,大约阅读时间需要 19 分钟。

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']}",        ],     ...    ],

 

第四步:

在默认控制器里这么改造

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

 

 

转载于:https://www.cnblogs.com/wenhainan/p/10432011.html

你可能感兴趣的文章
用友UAP
查看>>
Tomcat error: A child container failed during start
查看>>
jquery 时间戳和日期时间转化
查看>>
Codeforces Round #370 (Div. 2) C. Memory and De-Evolution 水题
查看>>
MySQL数据备份之mysqldump使用
查看>>
mysql中根据一个字段相同记录写递增序号,如序号结果,如何实现?
查看>>
sql STUFF用法
查看>>
fdisk 分区
查看>>
别说无所谓
查看>>
irb的子会话 - 相思雨 - 博客园
查看>>
python 网络编程
查看>>
aspx 页面数据绑定 前台数据绑定
查看>>
《推荐系统实践》样章:如何利用用户标签数据
查看>>
U-Boot Makefile文件分析
查看>>
Puppetmaster高可用和可扩展的方案设计
查看>>
[2013EJDE]Osgood type regularity criterion for the $3$D Newton-Boussinesq equations
查看>>
黄疸案
查看>>
[转载]ASP.NET伪静态页面的实现和伪静态在IIS7.0中的配置
查看>>
【转】Android源代码编译命令m/mm/mmm/make分析--不错
查看>>
【SQL】SQL中笛卡尔积、内连接、外连接的数据演示
查看>>