zoukankan      html  css  js  c++  java
  • 扫码登录

    调用二维码

    方法一:内嵌式 调用二维码

    生成code

       const s = document.createElement('script')
            s.type = 'text/javascript'
            s.src = 'https://res.wx.qq.com/connect/zh_CN/htmledition/js/wxLogin.js'
            const wxElement = document.body.appendChild(s)
            wxElement.onload = function () {
              var obj = new WxLogin({
                id:"sharePicBox",
                appid: "****",
                scope: 'snsapi_login', // 网页默认即可
                redirect_uri: encodeURIComponent(''), // 授权成功后回调的url
                state: 'WX' ,// 可设置为简单的随机数加session用来校验
                style: 'black', // 提供"black"、"white"可选。二维码的样式
                href: '' // 外部css文件url,需要https
              })
            }

    同页面监听

     const params = this.$route.query
          const state = params.state
          const code = params.code
          if (!validatenull(state)){
            const loading = this.$loading({
              lock: true,
              text: `${
                state === "WX" ? "微信" : "QQ"
                }登录中,请稍后。。。`,
              spinner: "el-icon-loading"
            });
            if (code) {
              axios({
                url:'/system/api/blade-auth/authredirect?code='+code,
                method: 'get'
              }).then(respanse=>{
                if (respanse.data.data){
                  let user = respanse.data.data
                  this.loginForm.username = user.account;
                  this.loginForm.password = user.account;
                  this.loginForm.code =  user.code;
                  this.loginForm.key =  user.key;
                  //验证码的索引
                  this.$store.dispatch("LoginByUsername", this.loginForm).then(() => {
                    this.$router.push({path: this.tagWel.value});
                    loading.close();
                  })
                }
              })
            }
            setTimeout(() => {
              loading.close();
            }, 2000);

    方法二:弹出式  调用二维码

        let appid, client_id, redirect_uri, url;
          redirect_uri = encodeURIComponent(
            window.location.origin + "/system/#/authredirect"
          );
          // let javaUrl = 'mzh.free.idcfengye.com/blade-auth/oauth/wx/login'
          if (thirdpart === "wechat") {
            appid = "***";
            url =
              "https://open.weixin.qq.com/connect/qrconnect?appid=" +
              appid +
              "&redirect_uri=" +
              redirect_uri +
              "&state=WX&response_type=code&scope=snsapi_login#wechat_redirect";
          } else if (thirdpart === "tencent") {
            client_id = "xxxx";
            url =
              "https://graph.qq.com/oauth2.0/authorize?response_type=code&state=QQ&client_id=" +
              client_id +
              "&redirect_uri=" +
              redirect_uri;
          }
          openWindow(url, thirdpart, 540, 540);

    扫码后跳转的页面

      window.close()
        const params = this.$route.query
        const state = params.state
        const code = params.code
        window.location.href = `${window.location.origin}/system/#/login?state=${state}&code=${code}`

    回到登录的页面 拿到code

          const params = this.$route.query
          const state = params.state
          const code = params.code
          if (!validatenull(state)){
            const loading = this.$loading({
              lock: true,
              text: `${
                state === "WX" ? "微信" : "QQ"
                }登录中,请稍后。。。`,
              spinner: "el-icon-loading"
            });
            if (code) {
              axios({
                url:'/system/api/blade-auth/authredirect?code='+code,
                method: 'get'
              }).then(respanse=>{
                if (respanse.data.data){
                  let user = respanse.data.data
                  this.loginForm.username = user.account;
                  this.loginForm.password = user.account;
                  this.loginForm.code =  user.code;
                  this.loginForm.key =  user.key;
                  //验证码的索引
                  this.$store.dispatch("LoginByUsername", this.loginForm).then(() => {
                    this.$router.push({path: this.tagWel.value});
                    loading.close();
                  })
                }
              })
            }

    后台解析code 创建或更新数据库 把账号信息返回前台 前台再调用登录

        JSONObject weixinUserOpenID = WxCodeOpenId.getWeixinUserOpenID(WX_TokenUtil.wxAppId, WX_TokenUtil.wXappSecret, code);
            R<UserInfo> openid = userClient.userInfo("000000", weixinUserOpenID.get("unionid").toString());
            User user = openid.getData().getUser();
            R<AppUserInfo> unionid = competitionClient.get(weixinUserOpenID.get("unionid").toString());
            if (Strings.isBlank(user.getWxUnionid())) {
                user = new User();
            }
            user.setAccount(weixinUserOpenID.get("unionid").toString());
            user.setPassword(weixinUserOpenID.get("unionid").toString());
            if (unionid.getData().getId()!=null){
                AppUserInfo data = unionid.getData();
                user.setName(data.getNickName());
                user.setRealName(data.getRealName());
                user.setAvatar(data.getAvatarUrl());
                user.setEmail(data.getEmail());
                user.setPhone(data.getTel());
                user.setSex(data.getSex()=="男"?0:1);
            }else {
                user.setName("昵称");
                user.setRealName("真名");
                user.setAvatar("头像");
                user.setEmail("邮箱");
                user.setPhone("手机");
                user.setBirthday(new Date());
                user.setSex(0);
            }
            user.setRoleId("1253370403732258818");
            user.setDeptId("1123598813738675201");
            user.setWxUnionid(weixinUserOpenID.get("unionid").toString());
            if (user.getId()==null) {
                userClient.saveUser(user);
            }else {
                user.setPassword(DigestUtil.encrypt(user.getPassword()));
                userClient.updateUser(user);
            }
            SpecCaptcha specCaptcha = new SpecCaptcha(130, 48, 5);
            String verCode = specCaptcha.text().toLowerCase();
            String key = StringUtil.randomUUID();
            redisCache.setEx(CacheNames.CAPTCHA_KEY + key, verCode, Duration.ofMinutes(30));
            user.setKey(key);
            user.setCode(verCode);
            return R.data(user);
    const params = this.$route.query
    const state = params.state
    const code = params.code
    if (!validatenull(state)){
    const loading = this.$loading({
    lock: true,
    text: `${
    state === "WX" ? "微信" : "QQ"
    }登录中,请稍后。。。`,
    spinner: "el-icon-loading"
    });
    if (code) {
    axios({
    url:'/system/api/blade-auth/authredirect?code='+code,
    method: 'get'
    }).then(respanse=>{
    if (respanse.data.data){
    let user = respanse.data.data
    this.loginForm.username = user.account;
    this.loginForm.password = user.account;
    this.loginForm.code = user.code;
    this.loginForm.key = user.key;
    //验证码的索引
    this.$store.dispatch("LoginByUsername", this.loginForm).then(() => {
    this.$router.push({path: this.tagWel.value});
    loading.close();
    })
    }
    })
    }
  • 相关阅读:
    DOM getElementById
    百度之星2014
    游艇租借
    2014年acm亚洲区域赛·鞍山站
    UVALive 4255 Guess
    UVA 10054 The Necklace
    UVA 10047 The Monocycle
    UVA 11624 Fire!
    第九届黑龙江省赛
    剑指offer系列31-----二叉树的下一个节点
  • 原文地址:https://www.cnblogs.com/-mzh/p/13084992.html
Copyright © 2011-2022 走看看