Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
catmes
EasyIM
提交
cbc6757c
E
EasyIM
项目概览
catmes
/
EasyIM
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
E
EasyIM
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
cbc6757c
编写于
2月 27, 2023
作者:
W
wuhanqing
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
ADD API /api/user/logout
上级
9fd252dc
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
111 addition
and
12 deletion
+111
-12
.gitignore
.gitignore
+2
-1
README.md
README.md
+15
-3
database/user.go
database/user.go
+3
-6
server/handler/http.go
server/handler/http.go
+91
-2
未找到文件。
.gitignore
浏览文件 @
cbc6757c
...
...
@@ -10,4 +10,5 @@ go.sum
.env
*.exe
*.bk
easyim
\ No newline at end of file
easyim
docs/apidoc
\ No newline at end of file
README.md
浏览文件 @
cbc6757c
...
...
@@ -76,12 +76,24 @@ IM数据通讯的长连接,支持数据传输 `json`, `protobuf` 两种格式
## 在线文档
全局安装
`docsify`
文档生成工具:
### docsify 文档工具
```
# 全局安装 docsify 文档生成工具
npm i docsify-cli -g
# 文档初始化
docsify init ./docs
# 本地预览. 默认地址: http://localhost:3000
docsify serve docs
```
-
文档初始化:
`docsify init ./docs`
### apidoc 文档工具
-
本地预览:
`docsify serve docs`
\ No newline at end of file
```
# 全局安装 apidoc 文档工具,可以根据代码注释,生成API文档
npm install -g apidoc
# 扫描 server/handler 目录中的代码注释,在 docs/apidoc 目录生成API文档
apidoc -i server/handler -o docs/apidoc
# 配置文件 apidoc.json
# 默认地址: http://localhost:3000/apidoc/index.html
```
\ No newline at end of file
database/user.go
浏览文件 @
cbc6757c
...
...
@@ -95,21 +95,18 @@ func (u User) Register(password string) (User, error) {
user
.
Account
=
u
.
Account
GetModel
(
user
)
if
user
.
ID
>
0
{
return
User
{},
fmt
.
Errorf
(
"
注册失败!
登录账号已存在"
)
return
User
{},
fmt
.
Errorf
(
"登录账号已存在"
)
}
}
if
u
.
Mobile
!=
""
{
user
.
Mobile
=
u
.
Mobile
GetModel
(
user
)
if
user
.
ID
>
0
{
return
User
{},
fmt
.
Errorf
(
"
注册失败!
手机号已存在"
)
return
User
{},
fmt
.
Errorf
(
"手机号已存在"
)
}
}
if
user
.
ID
>
0
{
return
User
{},
fmt
.
Errorf
(
"error: Regiser Fail. User exists"
)
}
if
u
.
Account
==
""
&&
u
.
Mobile
==
""
{
return
User
{},
fmt
.
Errorf
(
"
注册失败!
登录账号不能为空"
)
return
User
{},
fmt
.
Errorf
(
"登录账号不能为空"
)
}
user
.
Account
=
u
.
Account
user
.
Mobile
=
u
.
Mobile
...
...
server/handler/http.go
浏览文件 @
cbc6757c
...
...
@@ -43,13 +43,29 @@ type UserRegisterForm struct {
Nickname
string
`json:"nickname"`
}
/**
* @apiDefine LoginParams
* @apiBody {String} account 用户登录账号
* @apiBody {String} password 用户登录密码
*/
/**
* @api {post} /api/user/register 用户注册
* @apiName 用户注册接口
* @apiGroup 注册登录
* @apiUse LoginParams
* @apiBody {String} nickname 用户昵称
* @apiUse PublicCommonParams
* @apiErrorExample {json} 请求异常示例
* {"code":400,"msg":"注册失败!登录账号已存在","data":{}}
* @apiUse LoginOrRegisterSuccessBlock
*/
func
userRegister
(
req
*
model
.
Request
)
error
{
postData
:=
UserRegisterForm
{}
err
:=
req
.
GetHttpBodyToJson
(
&
postData
)
if
err
!=
nil
{
return
req
.
ResponseJson
(
model
.
ResponseQueryArgsError
(
err
.
Error
()))
}
u
:=
database
.
User
{
Account
:
postData
.
Account
,
Nickname
:
postData
.
Nickname
}
u
,
err
=
u
.
Register
(
postData
.
Password
)
if
err
!=
nil
{
...
...
@@ -58,6 +74,16 @@ func userRegister(req *model.Request) error {
return
loginOrRegisterSuccess
(
u
,
*
req
)
}
/**
* @api {post} /api/user/login 用户登录
* @apiName 用户登录
* @apiGroup 注册登录
* @apiUse LoginParams
* @apiUse PublicCommonParams
* @apiErrorExample {json} 请求异常示例
* {"code":400,"msg":"密码不正确","data":{}}
* @apiUse LoginOrRegisterSuccessBlock
*/
func
userLogin
(
req
*
model
.
Request
)
error
{
postData
:=
UserLoginForm
{}
err
:=
req
.
GetHttpBodyToJson
(
&
postData
)
...
...
@@ -76,6 +102,17 @@ func userLogin(req *model.Request) error {
return
loginOrRegisterSuccess
(
*
user
,
*
req
)
}
/**
* @apiDefine LoginOrRegisterSuccessBlock
* @apiSuccess {String} data.id 用户ID
* @apiSuccess {String} data.nickname 用户昵称
* @apiSuccess {String} data.avatar 用户头像
* @apiSuccess {String} data.access_token 通讯凭证,在IM通讯中或需要身份鉴权的API中使用。 有效期7200秒(2小时)
* @apiSuccess {String} data.expires_in access_token(通讯凭证)的有效期(一般为7200秒)
* @apiSuccess {String} data.refresh_token 用于刷新access_token(通讯凭证),有效期30天
* @apiSuccessExample {json} 请求成功示例
* {"code":200,"msg":"success","data":{"access_token":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhY2NvdW50IjoiYWNjb3VudFd1aGFucWluZyIsImF2YXRhciI6IiIsImV4cCI6MTY3NzQ3NDkxNCwiaWQiOjE2Mjk0MjA5MjQ5MTI1Mzc2MDB9.IucceY2x7FSB81-nxEj_yMYggYaBnCzEX1GA8LdzPCE","avatar":"https://gw.alipayobjects.com/zos/antfincdn/XAosXuNZyF/BiazfanxmamNRoxxVxka.png","expires_in":7200,"id":"1629420924912537600","nickname":"飞天的猪","refresh_token":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhY2NvdW50IjoiYWNjb3VudFd1aGFucWluZyIsImF2YXRhciI6IiIsImV4cCI6MTY4MDA1OTcxNCwiaWQiOjE2Mjk0MjA5MjQ5MTI1Mzc2MDB9.Mu4N8-uegCdq26ocIx7HINmoUgLyrwpqo4cYDslHwzs"}}
*/
func
loginOrRegisterSuccess
(
u
database
.
User
,
req
model
.
Request
)
error
{
jwtInfo
:=
u
.
GetJwtInfo
()
data
:=
model
.
JsonObject
{
...
...
@@ -89,8 +126,39 @@ func loginOrRegisterSuccess(u database.User, req model.Request) error {
return
model
.
ResponseApi
(
data
,
"success"
,
200
)
.
Write
(
req
)
}
type
UserLogoutData
struct
{
Account
string
`json:"account"`
AccessToken
string
`json:"access_token"`
}
/**
* @api {post} /api/user/logout 退出登录
* @apiGroup 注册登录
* @apiBody {String} access_token 通讯凭证
* @apiUse PublicCommonParams
* @apiErrorExample {json} 请求异常示例
* {"code":400,"msg":"access_token不正确","data":{}}
* @apiSuccessExample {json} 请求成功示例
* {}
*/
func
userLogout
(
req
*
model
.
Request
)
error
{
return
nil
postData
:=
UserLogoutData
{}
err
:=
req
.
GetHttpBodyToJson
(
&
postData
)
if
err
!=
nil
{
return
req
.
ResponseJson
(
model
.
ResponseQueryArgsError
(
err
.
Error
()))
}
u
:=
database
.
User
{}
u
,
err
=
u
.
GetUserByJwt
(
postData
.
AccessToken
)
if
err
!=
nil
{
return
model
.
ResponseFail
(
err
.
Error
(),
400
)
.
Write
(
*
req
)
}
u
.
ResetSalt
()
_
,
err
=
database
.
UpdateModel
(
&
u
,
map
[
string
]
interface
{}{
"salt"
:
u
.
Salt
})
if
err
!=
nil
{
return
model
.
ResponseServerError
()
.
Write
(
*
req
)
}
return
model
.
ResponseOk
(
"退出登录成功"
)
.
Write
(
*
req
)
}
func
getUserAccessToken
(
req
*
model
.
Request
)
error
{
...
...
@@ -100,3 +168,24 @@ func getUserAccessToken(req *model.Request) error {
func
getUserRefreshToken
(
req
*
model
.
Request
)
error
{
return
nil
}
/**
* @apiDefine PublicCommonParams
* @apiSuccess {integer} code 状态码(请求成功为200)
* @apiSuccess {string} msg 请求成功提示信息
* @apiSuccess {Object} data 响应数据
* @apiSuccess {integer} code 请求异常状态码
* @apiError {string} msg 请求异常提示信息
*/
/**
* @apiDefine ErrorServer
* @apiErrorExample {json} 请求异常示例
* {"code":500,"msg":"ServerError.服务器内部错误","data":{}}
*/
/**
* @apiDefine PublicCommonBlock
* @apiUse PublicCommonParams
* @apiUse ErrorServer
*/
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录