package Api import ( "crypto/sha256" "encoding/hex" "github.com/aarongao/tools" "github.com/gin-gonic/gin" "gopkg.in/mgo.v2/bson" "letu/DB" "regexp" "strconv" "time" ) // //// @Title 创建用户 //// @Description 用户注册 //// @Accept json //// @Produce json //// @Param password 1 string true "密码" //// @Param confirmpassword 1 string true "确认密码" //// @Param birthday 2010.10.10 string true "生日" //// @Param fullname aarongao string true "全名" //// @Param code 12345678 string true "6位验证码" //// @Param mobile 18616619599 string true "手机,同用户名" //// @Param openid 12345 string true "微信id" //// @Success 200 {object} tools.ResponseSeccess "{"errcode":0,"result":"ok"}" //// @Failure 500 {object} tools.ResponseError "{"errcode":1,"errmsg":"错误原因"}" //// @Router /CreateUser? [post] //func CreateUser(c *gin.Context) { // c.Header("Access-Control-Allow-Origin", c.Request.Header.Get("Origin")) // c.Header("Access-Control-Allow-Credentials", "true") // // if c.PostForm("mobile") == "" { // c.JSON(200, tools.ResponseError{ // 1, // "必须有手机号", // }) // return // } // if c.PostForm("password") != c.PostForm("confirmpassword") { // c.JSON(200, tools.ResponseError{ // 1, // "密码错误", // }) // return // } // // // 检查验证码 // code := DB.Redis.Get(c.PostForm("mobile")) // if code == "" || code != c.PostForm("code") { // c.JSON(200, tools.ResponseError{ // 1, // "验证码错误", // }) // return // } // // objectID := bson.NewObjectId() // err := DB.CMember.Insert(DB.SMember{ // &objectID, // c.PostForm("password"), // c.PostForm("birthday"), // c.PostForm("fullname"), // c.PostForm("mobile"), // c.PostForm("openid"), // "", // }) // if err == nil{ // c.JSON(200, tools.ResponseSeccess{ // 0, // "ok", // }) // }else{ // c.JSON(200, tools.ResponseError{ // 0, // "此手机号已经注册", // }) // } // // //} var Regular = "^((13[0-9])|(14[5,7])|(15[0-3,5-9])|(17[0,3,5-8])|(18[0-9])|166|198|199|(147))\\d{8}$" // @Title 登录 // @Description 用户管理 - 用户登录&注册 // @Accept json // @Produce json // @Param Mobile aaron string true "手机号" // @Param Password 1 string true "密码或验证码(使用验证码的新手机号自动注册)" // @Success 200 {object} tools.ResponseSeccess "{"errcode":0,"result":{"Id":"5e09c64c1c09c6f0f7ca2fa9","Token":"640bf934e425aba5d3c90998b2641f2f0ca07261d334d9615d1cd4790b5f34e7"}} 调用其它需要登陆的接口时携带token,有过期时间" // @Failure 500 {object} tools.ResponseError "{"errcode":1,"errmsg":"错误原因"}" // @Router /LoginUser? [post] func LoginUser(c *gin.Context) { c.Header("Access-Control-Allow-Origin", c.Request.Header.Get("Origin")) c.Header("Access-Control-Allow-Credentials", "true") reg := regexp.MustCompile(Regular) if !reg.MatchString(c.PostForm("Mobile")) { c.JSON(200, tools.ResponseError{ 1, "手机号格式不正确", }) return } if c.PostForm("Mobile") == "" || c.PostForm("Password") == "" { c.JSON(200, tools.ResponseError{ 1, "空", }) return } // 生成token tokenunit8 := sha256.Sum256([]byte(c.PostForm("Mobile") + c.PostForm("Password") + strconv.FormatInt(time.Now().UnixNano(), 10))) token := hex.EncodeToString(tokenunit8[:32]) // 检查验证码 cacheCode := DB.Redis.Get(c.PostForm("Mobile")) selected := bson.M{} var User *DB.SMember if cacheCode == c.PostForm("Password") { selected["Mobile"] = c.PostForm("Mobile") DB.CMember.Find(selected).One(&User) // 验证码匹配,但手机号不存在 if User == nil { objectID := bson.NewObjectId() oUser := DB.SMember{ &objectID, "", "", "", c.PostForm("Mobile"), "", token, "", } DB.CMember.Insert(oUser) //if err == nil { c.JSON(200, tools.ResponseSeccess{ 0, oUser, }) return //} } } else { selected["Mobile"] = c.PostForm("Mobile") selected["Password"] = c.PostForm("Password") DB.CMember.Find(selected).One(&User) if User == nil { c.JSON(200, tools.ResponseError{ 1, "用户不存在或密码不正确", }) return } } // 更新用户信息 DB.CMember.Update( bson.M{"_id": User.Id}, bson.M{"$set": bson.M{"Token": token}}, ) User.Token = token c.JSON(200, tools.ResponseSeccess{ 0, User, }) } // @Title 用户信息 // @Description 用户管理 - 获取用户信息 // @Accept json // @Produce json // @Param id aaron string true "用户id" // @Success 200 {object} tools.ResponseSeccess "{"errcode":0,"result":{"Id":"5e09c64c1c09c6f0f7ca2fa9","Token":"640bf934e425aba5d3c90998b2641f2f0ca07261d334d9615d1cd4790b5f34e7"}}" // @Failure 500 {object} tools.ResponseError "{"errcode":1,"errmsg":"错误原因"}" // @Router /UserInfo? [get] func UserInfo(c *gin.Context) { c.Header("Access-Control-Allow-Origin", c.Request.Header.Get("Origin")) c.Header("Access-Control-Allow-Credentials", "true") if c.Query("id") == "" { c.JSON(200, tools.ResponseError{ 1, "空", }) return } var User DB.SMember DB.CMember.Find(bson.M{"_id": bson.ObjectIdHex(c.Query("id"))}).One(&User) c.JSON(200, tools.ResponseSeccess{ 0, User, }) } // @Title 修改用户信息 // @Description 用户管理 - 修改用户信息 // @Accept json // @Produce json // @Param Password 1 string true "密码" // @Param ConfirmPassword 1 string true "确认密码" // @Param Birthday 2010.10.10 string true "生日" // @Param Fullname aarongao string true "全名" // @Param Code 12345678 string true "6位验证码" // @Param Mobile 18616619599 string true "手机,同用户名" // @Param Sex 男 string true "性别" // @Param Openid 12345 string true "微信id" // @Success 200 {object} tools.ResponseSeccess "{"errcode":0,"result":"ok"}" // @Failure 500 {object} tools.ResponseError "{"errcode":1,"errmsg":"错误原因"}" // @Router /UpdateUser? [post] func UpdateUser(c *gin.Context) { c.Header("Access-Control-Allow-Origin", c.Request.Header.Get("Origin")) c.Header("Access-Control-Allow-Credentials", "true") reg := regexp.MustCompile(Regular) if !reg.MatchString(c.PostForm("Mobile")) { c.JSON(200, tools.ResponseError{ 1, "手机号格式不正确", }) return } if c.PostForm("Mobile") == "" || c.PostForm("Password") == "" { c.JSON(200, tools.ResponseError{ 1, "手机号或密码为空", }) return } if c.PostForm("Password") != c.PostForm("ConfirmPassword") { c.JSON(200, tools.ResponseError{ 1, "2次密码不一致", }) return } // 检查验证码 code := DB.Redis.Get(c.PostForm("Mobile")) if code == "" || code != c.PostForm("Code") { c.JSON(200, tools.ResponseError{ 1, "验证码错误", }) return } err := DB.CMember.Update( bson.M{"Mobile": c.PostForm("Mobile")}, bson.M{"$set": bson.M{ "Password": c.PostForm("Password"), "Birthday": c.PostForm("Birthday"), "FullName": c.PostForm("Fullname"), "Mobile": c.PostForm("Mobile"), "Sex": c.PostForm("Sex"), }}, ) if err == nil { var User *DB.SMember DB.CMember.Find(bson.M{"Mobile": c.PostForm("Mobile")}).One(&User) c.JSON(200, tools.ResponseSeccess{ 0, User, }) } else { c.JSON(200, tools.ResponseError{ 1, err.Error(), }) } }