编程初学者的Go语言学习之旅 | 青训营笔记

93 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第10天。

前言

昨天简单讲了实现用户注册接口服务的实现,今天简单说一下用户登录接口服务的实现。

大体思路

用户注册,用户登录,以及后面要写的用户信息获取这三个接口的服务联系很大,所以我们在同一个go文件中进行编写即可。 在用户注册接口服务的实现中,我们创建了一张数据表,我们需要来检查传入的参数usernamepassword是否能对应上表中的数据。
同样的,我们首先需要判定传入参数的存在与否,使用c.GetQuery方法提取传入的参数,并生成存在布尔值:

username, usernameBool := c.GetQuery("username")
password, passwordBool := c.GetQuery("password")
if !usernameBool || !passwordBool{
//返回失败响应
return
}

之后,我们需要连接数据库,并检测传入的username参数是否为已注册的用户(即已在表中),使用Where方法限定与First方法查询,并将结果的type *gorm.DB赋予变量,然后对变量调用Error方法配合if语句构成失败分支:

result := db.Where("usernames = ?", username).First(&FindStruct)
if result.Error != nil {
   //返回失败响应
   })
   return
}

当检测到传入参数username已存在于数据库中时,我们需要检查传入的password是否是正确的,我们可以链式调用Where方法达到这个目的:

result2 := db.Where("usernames = ?", username).Where("passwords = ?",password).First(&FindStruct)

同样,我们需要做失败分支:

if result2.Error != nil {
   //返回失败响应
   })
   return
}

当以上操作之后均没有进入失败分支,那就证明用户已经登录成功了,我们需要对token进行处理,因为token是用户验证的唯一鉴证,使用一个不变的token是非常不安全的,故此我们可以使用segmentio包新随机生成一个字符串,并将注册时生成的token数据更新:

token := ksuid.New().String()
UserInfo.Table("dbname").Where("usernames = ?", username).Update("token", token)

最后返回成功响应即可。
以上就是用户登录接口的简单实现。