coderHome
项目简介
- coderHome 旨在打造一个程序员畅所欲言的平台。
提供的功能
功能一:用户注册登录
-
用户注册接口(
create):- 验证用户(
verifyUser):新用户注册时,用户、密码为空或者不上送,不予通过;已经注册过的用户名,不能再注册。 - 处理密码(
handlePassword);对合法的密码采用md5加密。 - 用户注册(
create);将用户名和加密后的密码存入数据库中。
- 验证用户(
-
用户登录认证接口(
login):- 验证登录(
verifyLogin):用户登录时,会对上送的name和password参数进行校验:用户名和密码为空、用户名在数据库中不存在、密码加密后与数据库中的密码不一致,均不予登录。 - 颁发
token令牌(login):在验证用户名和密码正确的情况下,采用jwt-token机制,给用户颁发一个令牌,作为后续用户访问一些接口或者资源的凭证。后端通过这个凭证来判断用户是否有权限访问。 - 注意:颁发
token时,使用PRIVATE_KEY。
- 验证登录(
-
用户登录授权(
test):- 验证授权(
verifyAuth):用户登录后,获取上送的token值,并验证token值,验证未通过,则抛出UNAUTHORIZATION的错误。 - 注意:
token未上传,或者token验证未通过,均需抛出异常。- 验证授权时,使用
PUBLIC_KEY。
- 验证授权(
功能二:发表动态功能
- 发表动态(
/moment):- 说明:用户登录以后,可以发表动态。
middleware层:验证登录授权verifyAuth(),只有登录的用户才能发动态,游客不能发动态。controller层:在create()函数内,获取userId和content,并传给server层。server层:将user_id, content写入moment表中。- 注意:获取用户
id时,使用const { id } = ctx.response.user;
- 修改动态(
/moment/:momentId):- 说明:用户可以修改自己发表的动态。
middleware层:验证登录verifyAuth(),验证授权verifyPermission(),修改动态时,只有登录的用户且自己发的动态,才能被修改。controller层:在update()函数内,获取userId和content,并传给server层。server层:将userId, content写入moment表中。
- 获取动态(单个)(
/:momentId):- 说明:用户可以获取单条动态详情。包括用户信息、头像、标签、评论内容、动态配图等。
middleware层:游客也可以看到单条动态的内容,无需登录认证和授权。controller层:在detail()函数内,获取momentId,并传给server层。server层:将momentId传入getMomentById()中,在moment表中,查询单条动态的信息并返回。
- 获取动态(列表)(
/moment):- 说明:用户可分页获取
moment表中的动态。包括动态内容、用户信息、评论总数和标签总数等。 middleware层:游客也可以分页获取动态的内容,无需登录认证和授权。controller层:在list()函数内,获取offset, size,并传给server层。server层:将offset, size传入getMomentList()中,在moment表中,查询动态的信息并返回。- 注意:
offset, size参数客户端采用query的方式上送。
- 说明:用户可分页获取
功能三:发表评论功能
- 发表评论(
/comment):- 说明:用户登录以后,可以对某条动态发表评论。
middleware层:验证登录授权verifyAuth(),只有登录的用户对某条动态进行评论,游客不能发评论。controller层:在create()函数内,获取userId,momentId和content,并传给server层。server层:将userId, momentId, content写入comment表中。- 注意:获取用户
id时,使用const { id } = ctx.response.user;
- 回复评论(
/:commentId/reply):- 说明:用户可以回复某条评论。
middleware层:验证登录verifyAuth(),回复评论时,只有登录的用户才能回复某条评论。controller层:在reply()函数内,获取userId,commentId,momentId和content,并传给server层。server层:将userId, commentId, momentId, content写入comment表中。
- 修改评论(
/:commentId):- 说明:用户可以修改自己发表的动态。
middleware层:验证登录verifyAuth(),验证授权verifyPermission(),修改评论时,只有登录的用户且自己发的评论,才能被修改。controller层:在update()函数内,获取commentId和content,并传给server层。server层:将commentId, content写入comment表中。
- 删除评论(
/comment/:commentId):- 说明:用户可以删除自己发表的评论。
middleware层:验证登录verifyAuth(),验证授权verifyPermission(),删除评论时,只有登录的用户且自己发的评论,才能被删除。controller层:在remove()函数内,获取commentId,并传给server层。server层:根据commentId,将评论从comment表中移除。
- 获取评论(列表)(
/comment):- 说明:用户可以获取某条动态的所有评论。
middleware层:游客也可以获取某条动态的所有评论,无需登录认证和授权。controller层:在list()函数内,获取momentId,并传给server层。server层:将momentId传入getCommentsByMomentId()中,在comment表中,查询评论信息并返回。- 注意:
momentId参数客户端采用query的方式上送。
功能四:添加标签功能
- 创建标签(
/label):- 说明:用户登录以后,可以创建标签。
middleware层:验证登录授权verifyAuth(),只有登录的用户才能创建标签,游客不能创建标签。controller层:在create()函数内,获取labelName,并传给server层。server层:将labelName写入label表中。
- 获取标签(列表)(
/moment):- 说明:用户发布动态时,提供已有的标签列表供用户选择。
middleware层:游客也可以分页获取动态的内容,无需登录认证和授权。controller层:在list()函数内,获取offset, size,并传给server层。server层:将offset, size传入getLabels()中,在label表中,查询标签信息并返回。- 注意:
offset, size参数客户端采用query的方式上送。
认证与授权的对比
| 认证 | 授权 |
|---|---|
| 验证确认身份以授予对系统的访问权限。 | 授权确定你是否有权访问资源。 |
| 这是验证用户凭据以获得用户访问权限的过程。 | 这是验证是否允许访问的过程。 |
| 它决定用户是否是他声称的用户。 | 它确定用户可以访问和不访问的内容。 |
| 身份验证通常需要用户名和密码。 | 授权所需的身份验证因素可能有所不同,具体取决于安全级别。 |
| 身份验证是授权的第一步,因此始终是第一步。 | 授权在成功验证后完成。 |
| 例如,特定大学的学生在访问大学官方网站的学生链接之前需要进行身份验证。这称为身份验证。 | 例如,授权确定成功验证后学生有权在大学网站上访问哪些信息。 |