手把手带你写一个 Web 框架
叶剑峰
腾讯高级工程师,前滴滴技术专家
22731 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 42 讲
特别放送 (1讲)
手把手带你写一个 Web 框架
15
15
1.0x
00:00/00:00
登录|注册

32|通用模块(下):用户模块开发

将用户存储到数据库
加密密码
验证邮箱、用户名的唯一性
验证token
使用日志服务记录发送邮件错误信息
使用配置服务获取发送邮件参数
使用SMTP发送邮件
返回成功状态
发送预注册的验证邮件
预注册
验证参数
使用VerifyLogin接口的场景和方法
调试方式
前端开发
服务模块的协议设计
后端开发的四个步骤
开启前后端同时调试模式
使用el-form和axios
创建注册页面和登录页面
开启hade特有的调试模式
使用swagger调试用户模块和用户服务
注册验证协议接口
发送邮件协议接口
注册接口
VerifyLogin
Logout
Login
VerifyRegister
SendRegisterMail
Register
思考题
小结
前端开发
后端调试
用户模块接口实现
设计用户服务协议
用户模块开发

该思维导图由 AI 生成,仅供参考

你好,我是轩脉刃。
上一节课我们设计好用户模块的需求后,开始了后端开发。在后端开发中我们明确了开发流程的四个步骤,先将接口 swaggger 化,再定义用户服务协议,接着开发模块接口,最后实现用户服务协议。而且上节课已经完成了接口 swagger 化,以及用户服务协议设计的模型部分。
这节课,我们就继续完成用户服务协议的定义,再开发模块接口和实现用户服务协议。

用户服务协议

前面我们设计好了一个模型 User 了,“接口优于实现”,来设计这个服务的接口,看看要提供哪些能力。
首先用户服务一定要提供的是预注册能力,所以提供了一个 Register 方法。预注册之后,我们还要提供发送邮件的能力,再提供一个发送邮件的接口 SendRegisterMail。当然最后要提供一个确认注册用户的接口 VerfityRegister。
在登录这块,用户服务一定要提供登录、登出的接口 Login 和 Logout。同时由于所有业务请求,比如创建问题等逻辑,我们需要使用 token 来获取用户信息,所以我们也要提供验证登录的接口 VerifyLogin。
于是整体的接口设计如下,详细信息都写在注释中了:
// Service 用户相关的服务
type Service interface {
// Register 注册用户,注意这里只是将用户注册, 并没有激活, 需要调用
// 参数:user必填,username,password, email
// 返回值: user 带上token
Register(ctx context.Context, user *User) (*User, error)
// SendRegisterMail 发送注册的邮件
// 参数:user必填: username, password, email, token
SendRegisterMail(ctx context.Context, user *User) error
// VerifyRegister 注册用户,验证注册信息, 返回验证是否成功
VerifyRegister(ctx context.Context, token string) (bool, error)
// Login 登录相关,使用用户名密码登录,获取完成User信息
Login(ctx context.Context, user *User) (*User, error)
// Logout 登出
Logout(ctx context.Context, user *User) error
// VerifyLogin 登录验证
VerifyLogin(ctx context.Context, token string) (*User, error)
}
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文详细介绍了通用模块中用户模块的开发流程,包括后端开发的四个步骤、用户服务协议设计、注册、发送邮件、验证注册、登录、登出和验证登录等接口的设计和实现过程。作者通过具体的代码实现展示了用户模块开发的流程和技术特点,为读者提供了深入的技术细节和实践经验。文章还介绍了发送邮件协议接口和注册验证协议接口的具体实现,以及后端调试和前端开发的相关内容。整体而言,本文内容丰富,涵盖了后端和前端开发的方方面面,对于想要深入了解用户模块开发流程和技术细节的读者来说,是一篇非常有价值的文章。文章还提出了思考题,引发读者思考和讨论。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《手把手带你写一个 Web 框架》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(1)

  • 最新
  • 精选
  • 宙斯
    if db.Where(&User{Email: user.Email}).First(userDB).Error != gorm.ErrRecordNotFound { return nil, errors.New("邮箱已注册用户,不能重复注册")}if db.Where(&User{UserName: user.UserName}).First(userDB).Error != gorm.ErrRecordNotFound { return nil, errors.New("用户名已经被注册,请换一个用户名")} 这里判定写错了,是 ==呢?
    2022-03-14
收起评论
显示
设置
留言
1
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部