为了防止一些不符合预期的字符和过于频繁的请求传到后台,前端要对用户的输入进行校验和防止重复请求。当然不同网站的合法字符不一样,这里只做为空时不合法的校验:
//component/Login.vue <template> <div> ... <div> <input type="text" placeholder="Email" :class="'log-input' + (account==''?' log-input-empty':'')" v-model="account"><input type="password" placeholder="Password" :class="'log-input' + (password==''?' log-input-empty':'')" v-model="password"> <a href="javascript:;" @click="login">Login</a> </div> ... </div> </template> <script> import Loading from './Loading.vue' export default { name: 'Login', data(){ return { isLoging: false, account: '', password: '' } }, components:{ Loading }, methods:{ //登录逻辑 login(){ if(this.account!='' && this.password!=''){ this.toLogin(); } } } </script> ...
这里的this.toLogin就是登录请求的方法,在post密码到后端时不是直接发送,一般会按照后端定的规则加密后在发送,比如哈希算法,例子进行了的双重哈希加密,引用了js/sha1.min.js,大致实现如下:
... //登录请求 toLogin(){ //一般要跟后端了解密码的加密规则 //这里例子用的哈希算法来自./js/sha1.min.js let password_sha = hex_sha1(hex_sha1( this.password )); //需要想后端发送的登录参数 let loginParam = { account: this.account, password_sha } //设置在登录状态 this.isLoging = true; //请求后端 this.$http.post( 'example.com/login.php', { param: loginParam).then((response) => { if(response.data.code == 1){ //如果登录成功则保存登录状态并设置有效期 let expireDays = 1000 * 60 * 60 * 24 * 15; this.setCookie('session', response.data.session, expireDays); //跳转 this.$router.push('/user_info'); } }, (response) => { //Error }); ...
这样就完成了第3,4,5个步骤了。最后一步就是注销。
注销
注销时有的需要请求后端有的不需要,关键的事要删除保存的登录状态:
// component/UserInfo.vue ... logout(){ //删除cookie并跳到登录页 this.isLogouting = true; //请求后端,比如logout.php // this.$http.post('eaxmple.com/logout.php')... //成功后删除cookie this.delCookie('session'); //重置loding状态 this.isLogouting = false; //跳转到登录页 this.$router.push('/login/'); } ...