随便堆出个页面
我在这用了Ant.d,有表单验证,也能把验证码塞到input框内
关于用户名和密码没什么可说的,前端的重点在验证码部分的实现html
思路:在无登陆状态请求一个session接口,由后端返回一个惟一的`sessionid`,在后续请求验证码时把该`sessionid`放入请求头,后端便可把`sessionid`与验证码配对存入redis或db 后端验证码部分使用了svg-captcha来实现,具体实现的在后端部分说。 请求接口后返回到前端的为一个html标签的svg图形,若是单纯的显示验证码,则能够直接把该接口放入`<img>`标签的src内,可是经过该方法没法更改请求头的内容,就没法把`sessionid`放入,因此作了如下步骤来实现:
1.将session接口返回的sessionid
存入storage;前端
getSessionId(){ this.$axios.get('session').then((response) => { if(response.data === 200){ return } localStorage.setItem("sessionid",response.data) }) }
2.将sessionid
加入到请求头中node
_axios.interceptors.request.use( function(config) { axios.defaults.headers.sessionId = localStorage.getItem("sessionid") || ""; // Do something before request is sent return config; }, function(error) { // Do something with request error return Promise.reject(error); } );
3.将img
标签内的src指向变量(这里名为captchaImage),并在页面拿到sessionid
后或点击验证码时调用如下方法,将获取到的svg转换为base64并赋予captchaImage。ios
getCaptcha(event){ this.$axios.get('/getCaptcha').then((response) => { let a = window.btoa(unescape(encodeURIComponent(response.data))) this.captchaImage = 'data:image/svg+xml;base64,' +a }) },
这样在每次点击验证码图片时,都会得到新的验证码并在页面中显示。
接下来将用户名、密码、验证码发送给后端就不作赘述了。git
到此前端部分结束。
后端部分使用nodejs搭建,将写在《Vue+nodejs实现一个登陆系统(后端篇)》中,敬请期待。github