YiTao/controller/user_controller.go
2024-11-09 14:59:27 +08:00

110 lines
3.1 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package controller
import (
"yitao/config"
"yitao/ecode"
"yitao/util"
"yitao/validate"
"github.com/iris-contrib/middleware/jwt"
"github.com/kataras/iris/v12/mvc"
)
type UserController struct {
BaseController
}
func (con *UserController) BeforeActivation(b mvc.BeforeActivation) {
// Login Api
{
b.Handle("POST", "/auth/login", "AuthLogin")
b.Handle("POST", "/auth/signup", "AuthSignup")
}
}
// @Summary login api
// @Description the 用户登录接口
// @Tags auth api
// @Accept json
// @Produce json
// @Param loginParam body validate.LoginParam true "登录参数"
// @Success 200 {object} map[string]interface{} "{"jwt": "jwt.jwt.jwt"}"
// @Failure 400 {object} map[string]interface{} "{"msg": "错误信息","code":0}"
// @Router /api/user/auth/login [post]
func (con *UserController) AuthLogin() mvc.Result {
login_param := new(validate.LoginParam)
e := validate.ReadJSON(con.Ctx, login_param)
if e.Error() {
return e.Response()
}
e = con.Service.Captcha.Validate(login_param.CaptchaKey, login_param.CaptchaData)
if e.Error() {
return e.Response()
}
user, e := con.Service.User.AuthLogin(login_param.Username, login_param.Password)
if e.Error() {
return e.Response()
}
// 写入登录日志
ip := con.Ctx.Request().RemoteAddr
// 一个测试ip
//ip = "109.123.229.220" // 日本 东京
// 获取 ip 地址
city, country, _ := util.GetCityAndCountry(ip)
con.Service.LoginLog.Save(user.ID, ip, "Web", country, city)
// 原版 NP 在这里会触发一个对登录地点的检测,但我看数据库它就没成功获取到过国家于城市
// 所以就先不做异地检测了
// @TODO 如果有人愿意的话在这做个异地检测
// 好吧现在好了,但我懒得写了,就这样吧
// 开始生成jwt
conf := config.GetConfig()
token := jwt.NewTokenWithClaims(jwt.SigningMethodHS256, jwt.MapClaims{
"uid": user.ID,
"username": user.Username,
"time": util.GetTime(),
"is_admin": user.IsAdmin,
})
// 使用设置的秘钥签名生成jwt字符串
tokenString, _ := token.SignedString([]byte(conf.JwtSecret))
return mvc.Response{
Object: map[string]interface{}{
"jwt": tokenString,
},
}
}
// @Summary 注册API
// @Description 用户注册接口
// @Tags auth api
// @Accept json
// @Produce json
// @Param signupParam body validate.SignupParam true "注册参数"
// @Success 200 {object} map[string]interface{} "{"msg": "注册成功","code":1}"
// @Failure 400 {object} map[string]interface{} "{"msg": "错误信息","code":0}"
// @Router /api/user/auth/signup [post]
func (con *UserController) AuthSignup() mvc.Result {
var e *ecode.Ecode
signup_param := new(validate.SignupParam)
e = validate.ReadJSON(con.Ctx, signup_param)
if e.Error() {
return e.Response()
}
e = con.Service.Captcha.Validate(signup_param.CaptchaKey, signup_param.CaptchaData)
if e.Error() {
return e.Response()
}
_, e = con.Service.User.AuthSignup(signup_param.Username, signup_param.Password)
if e.Error() {
return e.Response()
}
return ecode.OK().Response()
}