controller负责接收
package controller
import (
"Gin_demo/CloudRestaurant/model"
"Gin_demo/CloudRestaurant/param"
service "Gin_demo/CloudRestaurant/service"
"Gin_demo/CloudRestaurant/tool"
"encoding/json"
"fmt"
"github.com/gin-gonic/gin"
"os"
"strconv"
"time"
)
type MemberController struct {
}
//注册的路由方法
func (mc * MemberController)Router(engine *gin.Engine) {
engine.GET("/api/sendcode", mc.sendSmsCode)
engine.POST("/api/login_sms", mc.smsLogin)
engine.GET("/api/captcha", mc.captcha)
engine.POST("/api/vertifycga",mc.vertifyCaptcha)
//login_pwd
engine.POST("/api/login_pwd",mc.nameLogin)
//上传头像
engine.POST("/api/upload/avator", mc.uploadAvator)
}
//上传用户头像
func (mc *MemberController)uploadAvator(context *gin.Context){
//1. 解析数据
userId := context.PostForm("user_id")
file, err := context.FormFile("avatar")
if err!= nil {
tool.Failed(context, "参数解析失败")
return
}
num := "user_"+userId
fmt.Println("num:",num)
//2. 只有登录才能修改用户头像信息
//sesstion := tool.Getsess(context, num)
//fmt.Println("sesstion:",sesstion)
//if sesstion == nil {
// tool.Failed(context, "参数不合法")
// return
//}
var member model.Member = model.Member{
Id: 1,
}
//json.Unmarshal(sesstion.([]byte),&member)
//2. file保存在本地
fileName := "./uploadfile/"+strconv.FormatInt(time.Now().Unix(), 10)+file.Filename
err = context.SaveUploadedFile(file, fileName)
if err != nil {
tool.Failed(context,"头像更新失败")
return
}
//将文件上传到fastDFS系统
fileId := tool.UploadFile(fileName)
if fileId != "" {
//删除本地文件
os.Remove(fileName)
//3. 将保存后的文件本地路径, 保存到用户表中的头像字段
memberService := service.MemberService{}
fileN := memberService.UploadAvator(member.Id, fileId)
if len(fileN) != 0 {
tool.Success(context, tool.FileServerAddr()+"/" +fileN)
return
}
}
//4. 返回结果
tool.Failed(context, "上传失败")
}
//用户名密码登录
func (mc *MemberController)nameLogin(context * gin.Context) {
//1. 解析参数
var loginParam param.LoginParam
err := tool.Decode(context.Request.Body,&loginParam)
if err!=nil {
tool.Failed(context,"参数解析失败")
return
}
fmt.Println("loginParam:",loginParam)
if len(loginParam.Name) == 0 ||len(loginParam.Password) == 0{
tool.Failed(context, "用户名或者密码不能为空")
return
}
//2. 验证验证码
result := tool.VertifyCaptcha(loginParam.Id, loginParam.Value)
if !result {
tool.Failed(context, "验证码不正确, 请重新验证")
return
}
//3. 登录 用户存在 或者 用户不存在
ms := service.MemberService{}
member := ms.Login(loginParam.Name, loginParam.Password)
if member == nil {
tool.Failed(context, "用户名或者密码错误")
return
}
//登录成功
if member.Id != 0 {
sess, _ := json.Marshal(member)
err := tool.Setsess(context,"user_"+strconv.FormatInt(member.Id,10),sess)
if err!=nil {
tool.Failed(context, "登录失败")
return
}
tool.Success(context, member)
return
}
tool.Failed(context, "登录失败")
}
//生成验证码
func (mc *MemberController)captcha(content *gin.Context) {
//todo 生成验证码 并返回客户端
tool.GenerateCaptcha(content)
}
//验证验证码是否正确
func (mc *MemberController)vertifyCaptcha(ctx *gin.Context) {
var captcha tool.CaptchaResult
err := tool.Decode(ctx.Request.Body, &captcha)
if err!=nil {
tool.Failed(ctx, "参数解析失败")
return
}
result := tool.VertifyCaptcha(captcha.Id, captcha.VertifyValue)
if result {
fmt.Println("验证通过")
}else{
fmt.Println("验证失败")
}
tool.Success(ctx, "验证成功")
}
//发送验证码
func (mc *MemberController)sendSmsCode(context * gin.Context) {
phone, exist := context.GetQuery("phone")
if !exist {
context.JSON(200, map[string]interface{}{
"code":0,
"msg":"参数解析失败",
})
return
}
fmt.Println("phone",phone)
ms := service.MemberService{}
isSend:= ms.SendCode(phone)
if isSend{
context.JSON(200, map[string]interface{}{
"code":1,
"msg":"短信发送成功",
})
return
}else{
context.JSON(200, map[string]interface{}{
"code":0,
"msg":"短信发送失败",
})
return
}
}
//手机号 +短信 登录
func (mc *MemberController)smsLogin(context * gin.Context) {
var smsLoginParam param.SmsLoginParam
err := tool.Decode(context.Request.Body,&smsLoginParam)
if err != nil{
fmt.Print(err)
tool.Failed(context,"参数解析失败")
return
}
//完成手机+验证码校验
us := service.MemberService{}
member := us.SmsLogin(smsLoginParam)
if member != nil {
sess, _ := json.Marshal(member)
err := tool.Setsess(context,"user_"+string(member.Id),sess)
if err!=nil {
tool.Failed(context, "登录失败")
return
}
tool.Success(context,member)
return
}
tool.Failed(context, "登录失败")
}
路由过来的网络请求处理: