扫码登陆 websocket
# 一、动态生成二维码
```
<script src="http://unpkg.com/jquery"></script>
<script src="https://unpkg.com/jquery.qrcode@1.0.3/jquery.qrcode.min.js"></script>
<div id="qrcode"></div>
<script>
function uuid() {
var s = [];
var hexDigits = "0123456789abcdef";
for (var i = 0; i < 36; i++) {
s[i] = hexDigits.substr(Math.floor(Math.random() * 0x10), 1);
}
s[14] = "4"; // bits 12-15 of the time_hi_and_version field to 0010
s[19] = hexDigits.substr((s[19] & 0x3) | 0x8, 1); // bits 6-7 of the clock_seq_hi_and_reserved to 01
s[8] = s[13] = s[18] = s[23] = "-";
var uuid = s.join("");
return (new Date).getTime() + "-" + uuid;
}
// 留心:state位置不能变,qrcode实参的text键要用
let state = uuid()
jQuery('#qrcode').qrcode({
render: "canvas",
foreground: "#000",
background: "#FFF",
text: `https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx5a9db0b452e8ca0b&redirect_uri=http://kg.zhaodashen.cn/mt/web/qr/login.jsp&response_type=code&scope=snsapi_base&state=${state}&connect_redirect=1#wechat_redirect`
});
</script>
```
# 二、检查用户是否扫码授权登陆
```
<script src="https://cdn.bootcss.com/socket.io/2.2.0/socket.io.js"></script>
<script>
// 创建 socket 对象
const socket = io('http://39.107.231.173:3001');
// 首次加入服务器监控队列
// 参数:state 【必须】全球唯一的登录标识
// 留心:state 是上面uuid()函数生成的
socket.emit('join', state)
// 监控服务器推送的登陆信息
// 留心:超过2分钟不扫码登陆二维码就会过期
// 过期推送数据:{meta:{state: 400, msg: "二维码已过期"},data:null}
socket.on('islogin', res => {
console.log(res.meta)
console.log(res.data)
// 提示登陆成功
// h5存储
// 重定向跳转
})
</script>
```