User.go 4.44 KB
package Api

import (
	"crypto/sha256"
	"encoding/hex"
	"github.com/aarongao/tools"
	"github.com/gin-gonic/gin"
	"gopkg.in/mgo.v2/bson"
	"letu/DB"
	"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,
			"此手机号已经注册",
		})
	}


}

// @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","Username":"admin","Password":"123","Birthday":"","FullName":"","Mobile":"","Openid":"","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")

	if c.PostForm("mobile") == "" || c.PostForm("password") == "" {
		c.JSON(200, tools.ResponseError{
			1,
			"空",
		})
		return
	}

	var User *DB.SMember
	DB.CMember.Find(bson.M{"Mobile": c.PostForm("mobile"), "Password": c.PostForm("password")}).One(&User)

	if User == nil {

		c.JSON(200, tools.ResponseError{
			1,
			"空",
		})
	} else {

		// 生成token
		tokenunit8 := sha256.Sum256([]byte(c.PostForm("mobile") + c.PostForm("password") + strconv.FormatInt(time.Now().UnixNano(), 10)))
		token := hex.EncodeToString(tokenunit8[:32])
		// 更新用户信息
		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","Username":"admin","Password":"123","Birthday":"","FullName":"","Mobile":"","Openid":"","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)

	if User == nil {

		c.JSON(200, tools.ResponseError{
			1,
			"空",
		})
	} else {

		c.JSON(200, tools.ResponseSeccess{
			0,
			User,
		})
	}

}