技能学习:学习使用golang(gin框架) + vue.js,开发前端全栈网站-9.登录功能(二):用户登录和密码验证

45 篇文章 5 订阅
12 篇文章 3 订阅
本文介绍了如何使用Golang的Gin框架和Vue.js开发前端全栈网站的登录功能。首先展示了Login.vue组件的创建,包括用户名和密码输入字段及登录按钮。接着,详细解释了后端登录接口的实现,包括密码验证方法和登录接口处理,通过bcrypt库比较用户输入的密码和数据库中加密的密码。最后,提到了全局响应拦截器处理错误信息,并预告了登录功能的下一步:token验证。
摘要由CSDN通过智能技术生成
技能学习:学习使用golang(gin框架) + vue.js,开发前端全栈网站-9.登录功能(二):用户登录和密码验证

相关文章:
技能学习:学习使用golang(gin框架) + vue.js,开发前端全栈网站-1.工具和本地环境

技能学习:学习使用golang(gin框架) + vue.js,开发前端全栈网站-8.模型的关联——无限层级分类
技能学习:学习使用golang(gin框架) + vue.js,开发前端全栈网站-9.登录功能(一):管理员功能的实现
技能学习:学习使用golang(gin框架) + vue.js,开发前端全栈网站-9.登录功能(二):用户登录和密码验证
技能学习:学习使用golang(gin框架) + vue.js,开发前端全栈网站-9.登录功能(三):登录的token验证
技能学习:学习使用golang(gin框架) + vue.js,开发前端全栈网站-10.生产环境编译

1.制作登录页面

Login.vue:

<template>
    <div class="login-container">
        <!-- 使用elementui中的card组件 -->
        <el-card header="管理员登录" class="login-card">
            <!-- 监听表单的submit事件,native.prevent监听原生表单事件跳转接口并且阻止页面跳转 -->
            <el-form @submit.native.prevent="login">
                <el-form-item label="用户名">
                    <el-input v-model="model.username"></el-input>
                </el-form-item>
                <el-form-item label="密码">
                    <el-input v-model="model.password" type="password"></el-input>
                </el-form-item>
                <el-form-item>
                    <el-button type="primary" native-type="submit">登录</el-button>
                </el-form-item>
            </el-form>
        </el-card>
    </div>
</template>

<script>
export default {
    data() {
        return {
            model: {}
        }
    },
    methods: {
        async login() {
            const res = await this.$http.post('login')
            console.log(res)
        }
    }
}
</script>

<style>
.login-card{
    width: 35rem;
    margin: 6rem auto;
}
</style>

在这里插入图片描述
在routes/index.js引入Login.vue组件并创建login路由:
在这里插入图片描述
进入login登陆页面:
在这里插入图片描述

2.登录接口和密码验证

(1)定义密码验证的方法

// 验证密码
// 传入字符串格式的两个密码,一个是数据库获取到的已加密密码,一个是需要进行验证的登录密码。输出一个bool值结果
func comparePsw(pswHashed string, pswLogin string) bool {
	// 将需要比对的密码放入byte格式数组中转码
	byteHashed := []byte(pswHashed)
	byteLogin := []byte(pswLogin)
	// 通过bcrypt内部自带的比对方法比对两个密码是否对应
	err := bcrypt.CompareHashAndPassword(byteHashed, byteLogin)
	// 如果验证错误
	if err != nil {
		return false
	}
	// 如果验证成功
	return true
}

在这里插入图片描述
(2)定义登录接口方法

// 登录的接口方法
func login(ctx *gin.Context) {
	// 1.连接数据库
	url := "mongodb://127.0.0.1"
	session, err := mgo.Dial(url)
	if err != nil { 
		panic(err) 
	}
	defer session.Close()

	session.SetMode(mgo.Monotonic, true)
	c := session.DB("db_go").C("admin")

	// 2.获取传入数据
	// 用admin模型定义form
	var form models.Admin
	// 合并传入数据到form,如果传值格式不符合上方定义的结构,则返回错误信息
	if err := ctx.Bind(&form); err != nil {
		ctx.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
		return
	}

	// 3.根据用户名找用户
	// 如果传值没有username
	if form.Username == "" {
		ctx.JSON(422, gin.H{"message": "请输入用户名"})
		return
	}
	// 查询username是否存在
	type modelName models.Admin
	modelNamer := modelName{}
	err = c.Find(bson.M{"username": form.Username}).One(&modelNamer)
	if err != nil {
		if err.Error() == "not found" {
			ctx.JSON(422, gin.H{"message": "没有该用户"})
			return
		}else{
			ctx.JSON(422, gin.H{"message": "请检查您的网络"})
			return
		}
	}

	// 4.校验密码
	// 如果没有输入密码
	if form.Password == "" {
		ctx.JSON(422, gin.H{"message": "请输入密码"})
		return
	}
	// 根据密码校验方法进行校验密码,传入数据库查询到的加密密码和前端传来的用户登录密码
	compare := comparePsw(modelNamer.Password, form.Password)
	if compare == false {
		ctx.JSON(422, gin.H{"message": "密码错误"})
		return
	}else{
		ctx.JSON(200, gin.H{"message": "登录成功"})
		return
	}

}

在这里插入图片描述
(3)定义登录路由和路由地址
后端接口地址应为http://localhost:3000/admin/api/login:
在这里插入图片描述
编译启动,测试:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.全局监听响应的拦截,将错误时发送的message在页面显示

admin/src/http.js:

// 全局进行响应的拦截(axios内的响应拦截方法)
http.interceptors.response.use(res => {
    return res
},err => {
    // 如果拦截到错误的操作,使用VUE将错误信息进行弹出展示
    // 获取错误信息console.log(err.response.data.message)
    Vue.prototype.$message({
        type: 'error',
        message: err.response.data.message
    })
    return Promise.reject(err)
})

在这里插入图片描述
保存再次进行测试:
在这里插入图片描述
到此,用户登录功能已经基本实现,但目前还缺少登录的一个重要功能:token验证。所以向上面登录还是半成品,没什么作用。下篇文章针对登录的token验证进行完善登录。

更多设计、功能的学习经验,大家也可以去我的公众号查看!

————
在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

最强的森

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值