微信二维码登录的原理是什么_请使用微信扫描二维码登录

微信二维码登录的原理是什么_请使用微信扫描二维码登录在电脑上使用微信时,你可能已经发现微信不提供传统的账号密码登陆,取而代之的是通过扫描二维码进行登陆。今天就要研究下次登陆方式微信时如何实现的?1、每次用户打开PC端登陆请求,系统返回一个唯一的uid,

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

在电脑上使用微信时,你可能已经发现微信不提供传统的账号密码登陆,取而代之的是通过扫描二维码进行登陆。今天就要研究下次登陆方式微信时如何实现的?

1、每次用户打开PC端登陆请求,系统返回一个唯一的uid,并将uid的信息绘制成二维码返回给用户。这里的uid一定是唯一的,否则就会造成你登陆了其他用户的账号或者其他用户登陆你的账号。

2、当用户使用登陆后的微信扫描该二维码的时候,会将这个uid和手机上的微信账号及密码产生的token进行绑定,并上传到服务器

3、WEB通过JS不断的向后端发起请求,查询有没有关于uid的登陆记录(uid和token是否存在于服务器上)。实现代码可以从微信页面获取:

    function _poll(_asUUID) {
        var _self = arguments.callee,
            _nTime = 0;
        _sCurUUId = _asUUID;

        _logInPage("_poll Request Start, time: " + new Date().getTime());
        _nTime = new Date().getTime();
        $.ajax({
        type: "GET",
        url: "https://login." + _sBaseHost + "/cgi-bin/mmwebwx-bin/login?uuid=" + _asUUID + "&tip=" + show_tip,
        dataType: "script",
        cache: false,
        timeout: _nAjaxTimeout,
        success: function(data, textStatus, jqXHR) {
            _logInPage("_poll Request Success, code: " + window.code + ", time: " + (new Date().getTime() - _nTime) + "ms");
            switch (_aoWin.code) {
            case 200:
                _sSecondRequestTime = new Date().getTime() - _sSecondRequestTime;
                _logInPage("Second Request Success, time: " + _sSecondRequestTime + "ms");
                clearTimeout(_oResetTimeout);

                $.get(_aoWin.redirect_uri + "&fun=new", function(msg) {
                    _logInPage("new func reponse, reponseMsg: " + msg);
                    _reportNow("new func reponse, reponseMsg: " + msg);
                    var code = msg.match(/<script>(.*)<\/script>/);
                    if(code){
                        eval(code[1]);
                    }else{
                        $("#container").show();
                        $("#login_container").hide();
                    }
                });

                _reportNow("/cgi-bin/mmwebwx-bin/login, Second Request Success, uuid: " + _asUUID + ", time: " + _sSecondRequestTime + "ms");
                break;

            case 201:
                clearTimeout(_oResetTimeout);
                show_tip = 0;
                $('.errorMsg').hide();
                $('.normlDesc').hide();
                $('.successMsg').show();
                _logInPage("First Request Success");
                _reportNow("/cgi-bin/mmwebwx-bin/login, First Request Success, uuid: " + _asUUID);
//                setTimeout(function(){
                    _logInPage("Second Request Start");
                    _reportNow("/cgi-bin/mmwebwx-bin/login, Second Request Start, uuid: " + _asUUID);

                    _sSecondRequestTime = new Date().getTime();

                    _nAjaxTimeout = 5 * 1000;
                    _self(_asUUID);
//                }, 500);
                break;

            case 408:
                setTimeout(function(){
                    _self(_asUUID);
                }, 500);
                break;

            case 400:
            case 500:
                _reset();
                _afterLoadWebMMDo(function(){
                    _aoWin.Log.d("500, Login Poll Svr Exception");
                });
                break;
            }
        },
        error: function(jqXHR, textStatus, errorThrown) {
            if (textStatus == 'timeout') {
                setTimeout(function(){
                    _self(_asUUID);
                }, 500);
            } else {
                setTimeout(function(){
                    _self(_asUUID);
                }, 5000);

                _logInPage("_poll Request Error:" + textStatus);
                _afterLoadWebMMDo(function(){
                    _aoWin.Log.e("Login Poll Error:" + textStatus);
                });
            }
        }
        });
    }

网页客户端每500毫秒就向服务器发起ssl请求,请求当前二维码的登陆信息,如果返回结果201,则说明已经获取扫描二维码终端相同的账号登陆授权,当返回其他结果时,将在500毫秒之后重新发起请求。

类似微信登陆场景应用场景还是很多,比如通过二维码进行设备间的授权。比如使用手机遥控 装有android系统的电视盒等。

引用地址:http://www.biaodianfu.com/weixin-qrcode.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/166608.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • GSLB相关概念

    GSLB相关概念域组:当网站使用CDN提供服务并用DNS解析原理构建GSLB时,通常会由权威DNS设置一个CDN对源站提供服务的域名作为源站域名的别名(CNAME).这个别名被称为"域组",GSLB可以将它映射成一个由多个虚拟服务器(VirutalServer)组成的服务池(Pool),这些虚拟服务器就是用户输入网站URL后经负载均衡调度直接提供服务的服务器.GSLB在解析域名的时候会直接返回其中一个虚拟服务器…

    2022年5月27日
    57
  • 漏洞知识库

    漏洞知识库

    2021年10月8日
    41
  • 代理IP池(sqlmap外部代理ip池)

    这些公共代理是完全免费提供的,不需要任何授权。免费代理通常是开放的、流行的公共代理。与私人代理不同,公共代理不需要注册或密码。事实上,它们是负责安装在计算机上的代理服务器并且不关心更改默认设置的系统管理员的错误或疏忽。因此,服务器通过特殊的扫描仪快速定位到网络中,成为渴望匿名的公众的财产。这些信息足以安全地浏览全球网络,而无需显示您的真实IP地址。这些代理有很大的优势:他们有一个简单的设置-这些代理不需要授权并且设置简单他们是免费的!没有流量限制或使用目的但是,除了所有这些优点之外,这

    2022年4月14日
    206
  • django2.0_django前端模板

    django2.0_django前端模板通过大量图片示例,手把手的带你创建一个要素齐全的django项目。

    2022年8月6日
    1
  • bootstrap自定义样式-bootstrap侧边导航栏的实现[通俗易懂]

    bootstrap自定义样式-bootstrap侧边导航栏的实现[通俗易懂]1.侧滑栏使用定位fixed2.使用bootstrap响应式使用工具类visible-smvisible-xshidden-xshidden-sm等对不同屏幕适配3.侧滑栏的侧滑效果不使用jquery方法来实现,使用的是css3transforms属性进行div的移动,侧滑的动画效果使用的是css属性transition

    2022年4月30日
    44
  • pcharm激活码 3月最新注册码

    pcharm激活码 3月最新注册码,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月14日
    39

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号