美文网首页
第三方应用与CRMEB标准版的用户整合及单点登录SSO实现《4》

第三方应用与CRMEB标准版的用户整合及单点登录SSO实现《4》

作者: 迅犀数科 | 来源:发表于2023-03-17 17:00 被阅读0次

    具体实现:

    第四步:调整CRMEB的H5版 特定API ,传递第一步获取到的用户授权凭据ticket,同步调整 CRMEB系统该API的接口(基于CRMEB系统的token创建),并在本API中同步返回给客户端;

      分步4.1:为避免多次请求接口,通过对CRMEBv4.6首页刷新观察,选定内置的获取站点配置接口(/api/site_config),也可选择别的接口使用;

    图4.1 H5端获取的主页请求API的接口列表
      分步4.2:修改默认首页文件 (\view\uni-app\pages\index\diy\index.vue);
      备注:标准版4.6还有个较为特殊的地方:因为后台支持首页diy模板与专题页模板的切换,因此在不同的设置下,还需要再同步调整页面:(\view\uni-app\pages\index\visualization\index.vue),基本类同,在此不再赘述
    约373行:
    修改为:
                   .....
                    activeRouter: '',
                    countNum: 0,
                    ticket:''  //此处为新增
                };
            },
    
    约381行:
          created(options) {
                let that = this
                this.ticket = this.getQueryString('ticket') == null ? '' : this.getQueryString('ticket')  //此处为新增
                this.$nextTick(function() {
                    uni.getSystemInfo({
                        success: function(res) {
                            that.windowHeight = res.windowHeight;
                        }
                    });
                })
    
    
    约415行:
                // #ifndef APP-PLUS
                siteConfig({ticket:this.ticket}).then(res => {    //此处为修改:传递获取到的url参数ticket;
                    this.site_config = res.data.record_No;
                    //新增代码段开始
                    //crmeb接口产生token后返回给客户存储,后续访问的时候,crmeb会自动读取该授权token,关键点
                    if(res.data.token !=''){
                        that.$store.commit("LOGIN",
                            'token': res.data.token,
                            'time': res.data.expires_time - this.$Cache.time()
                        });
                        that.$store.commit("SETUID", res.data.uid);
                    }else{
                        that.$store.commit("LOGOUT");
                    }
                    //新增代码段开结束
    
    
    

      分步4.3:修改接口文件 (\view\uni-app\api\api.js);

    约411行:
    //修改后,用户在请求页面是,接口/api/site_config 会自动附带url参数中ticket票据跟crmeb对于的接口方法:getSiteConfig:
    /**
     * 获取网站基础配置
     */
    export function siteConfig(data) {
        return request.get('site_config', data, {
            noAuth: true
        });
    }
    

      分步4.4:修改crmeb接口方法 getSiteConfig(\app\api\controller\v1\PublicController.php);

    约117行:
        /**
         * 获取网站配置
         * @return mixed
         */
        public function getSiteConfig(Request $request)
        {
            $data['record_No'] = sys_config('record_No');
            list($ticket) = $request->getMore([
                ['ticket', '']
            ], true);
            $token = self::getUserToken($ticket);
            $data = array_merge($data,$token);
            return app('json')->success($data);
        }
    
        //在本文件最后面增加自定义方法:getUserToken;
        private function getUserToken($ticket = ''){
            $rs = array(
                'token'=>'',
                'expires_time'=>0,
                'uid'=>0
            );
            //创建授权token
            if(!empty($ticket)){
                /** @var UserServices $userService */
                $userService = app()->make(UserServices::class);
                $uid = $userService->value(['mark' => $ticket, 'is_del' => 0], 'uid');
                if ($uid){
                    $token = $userService->createToken((int)$uid, 'api');
                    if($token){
                        $rs['token'] = $token['token'];
                        $rs['expires_time'] = $token['params']['exp'];
                        $rs['uid'] = $uid;
                    }
                }
            }
            return $rs;
        }
    
    
    

    相关文章

      网友评论

          本文标题:第三方应用与CRMEB标准版的用户整合及单点登录SSO实现《4》

          本文链接:https://www.haomeiwen.com/subject/ferdrdtx.html