Cookie,Session,Token这些用于认证,鉴权的名词相信大家都很熟悉了,网上都有大量的文章讲解,这里我们主要针对本商城通过mysql进行存储的token鉴权进行讲解。
这只是作为一个学习项目使用Mysql进行存储鉴权信息,一般企业项目中的单点登录都会使用redis进行存储
什么是token
访问资源接口(API)时所需要的资源凭证
简单 token 的组成: uid(用户唯一的身份标识)、time(当前时间的时间戳)、sign(签名,token 的前几位以哈希算法压缩成的一定长度的十六进制字符串)
特点
服务端无状态化、可扩展性好
支持移动端设备
安全
支持跨程序调用
token 的身份验证流程:

token的解释,转自https://juejin.cn/post/6844904034181070861
商城中token存储
新蜂商城项目中存在两个类型的用户:
- 后台管理员
- 商城用户
其实现逻辑是一致的所以我们调一个讲解即可,这里我们使用后台管理员的登陆进行讲解
我们使用了两张数据库表对用户的登录进行管理
tb_newbee_mall_admin_user & tb_newbee_mall_admin_user_token
我们通过两张表的admin_user_id将 用户和token进行了关联,如果用户登陆状态是有效的,则tb_newbee_mall_admin_user_token中就会存在一条记录,否则就是用户没有登陆。


gin实现接口鉴权
管理员登录的时候,校验用户名和密码,通过的话则将生成的token存入数据库中用于后续的鉴权
// AdminLogin 管理员登陆
func (m *ManageAdminUserService) AdminLogin(params manageReq.MallAdminLoginParam) (err error, mallAdminUser manage.MallAdminUser, adminToken manage.MallAdminUserToken) {
err = global.GVA_DB.Where("login_user_name=? AND login_password=?", params.UserName, params.PasswordMd5).First(&mallAdminUser).Error
if mallAdminUser != (manage.MallAdminUser{
})

最低0.47元/天 解锁文章
3058

被折叠的 条评论
为什么被折叠?



