login登录页

在这里插入图片描述

顶部导航条:复用head组件

在这里插入图片描述

<v-head goBack="true" title="登录"></v-head>

账号密码登录表单

在这里插入图片描述
label标签不会向用户呈现任何特殊效果。不过,如果你在label标签内点击文本,就会触发此控件。就是说,当用户选择该标签时,浏览器就会自动将焦点转到和标签相关(用for关联)的表单控件上。
密码显示与隐藏由passwordVisible控制。passwordVisible默认false,密码不可见(密码输入框的type为password),展示闭眼的图标。passwordVisible为true,密码可见(密码输入框的type为text),展示睁眼的图标。点击图标可改变passwordVisible的取值(passwordVisible=!passwordVisible)从而控制闭眼睁眼的图标。

<form action="" class="login-form">
	<label class="form-label" for="username">
        <span class="label">账号</span>
        <input id="username" type="text" placeholder="请输入用户名" v-model="username">
    </label>
    <label class="form-label" for="password">
        <span class="label">密码</span>
        <!--
        passwordVisible默认false,密码不可见,文本框类型为password,反之文本框类型为text
        在password框中点击回车键,会调用login方法登录
        -->
        <input
          	id="password"
          	:type="passwordVisible?'text':'password'"
          	placeholder="请输入密码"
          	v-model="password"
          	@keyup.enter="login">
		<!--passwordVisible默认false,密码不可见,展示闭眼的图标,点击后改变passwordVisible的取值,从而控制闭眼睁眼的图标-->
        <span @click="changeVisible">
          	<!--闭眼的图标-->
          	<i class="iconfont icon" v-if="!passwordVisible">&#xe60a;</i>
          	<!--睁眼的图标-->
          	<i class="iconfont icon" v-else>&#xe6d0;</i>
        </span>
	</label>
    <!--点击登录按钮后,使用.prevent组织表单原生的登录操作,而是调用login方法-->
    <div class="button" @click.prevent="login();">
        <span>登录</span>
    </div>
    <span class="tip">未注册直接输入账号密码,自动注册!</span>
</form>
<script>
	changeVisible() {
        this.passwordVisible = !this.passwordVisible;
    }
</script>

在password框中点击回车键以及点击登录按钮,都会调用login()登录。login()先去判断用户名和密码是否为空,为空则弹出提示消息,不为空则调用异步login()登录,异步login()发送post请求调用后端的userLogin方法。userLogin先从请求体中获取username和password,对password进行md5加密,然后去数据库中查找这个用户名:

  1. 因为前端没有写注册功能,所以这里如果用户输入的账号名是不存在的,就创建一个新的账号:用户名、密码(MD5加密后的)、用户id(用户在数据库的id)、头像(默认)。将这个新账号保存在数据库中。 然后给请求信息设置session(session为用户id)并返回给前端:{status: 200,success: '注册用户并登录成功'}
  2. 如果数据库中用户的密码与现在用户输入的密码一致,注意这两个密码都是MD5加密后的,表示用户输入的账号存在并且密码正确,给请求信息设置session(session为用户id)并返回给前端:{status: 200,success: '登录成功',username: user.username,//用户名 avatar: user.avatar//用户头像}
  3. 否则的话返回给前端:{status: -1,message: '该用户已存在,密码输入错误'}

前端收到返回信息后,若返回信息的status为200,表示注册成功/登录成功,将用户名保存在cookie中并返回上一页。否则弹出错误消息:密码错误。

login() {
	if (!this.username) {
          this.alertText = '用户名输入不合法';
          this.showTip = true;
          return;
        } else if (!this.password) {
          this.alertText = '密码不能为空';
          this.showTip = true;
          return;
        }
	login({username: this.username, password: this.password}).then((response) => {
        if (response.data.status === 200) {// 注册成功/登录成功
            setInfo(this.username);// 将用户名保存在cookie中
            this.$router.go(-1);// 返回上一页
        } else {// 否则弹出错误消息:密码错误
            this.alertText = response.data.message;
            this.showTip = true;
        }
	});
}
      
login = (data) => {
	let req = {data,url: 'admin/user_login'}
  	return _post(req);
}
function setInfo(username) {
  return vue.$cookies.set(userInfo, username)
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值