2 Star 1 Fork 0

徐仲言 / express_back

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
index_service.go 3.23 KB
一键复制 编辑 原始数据 按行查看 历史
reggie 提交于 2021-10-03 16:02 . feat: 对接新的快递
package index
import (
"encoding/json"
"fmt"
"time"
"gitee.com/xu_zhong_yan/express_back/app/helpers"
"gitee.com/xu_zhong_yan/express_back/app/helpers/code"
"gitee.com/xu_zhong_yan/express_back/app/helpers/format"
"gitee.com/xu_zhong_yan/express_back/app/helpers/result"
"gitee.com/xu_zhong_yan/express_back/app/models"
"gitee.com/xu_zhong_yan/express_back/config"
"github.com/dgrijalva/jwt-go"
"github.com/gin-gonic/gin"
)
// 做模型参数的绑定校验
type LoginService struct {
Openid string `form:"openid" json:"openid" binding:"required,min=28,max=32"`
Platform string `form:"platform" json:"platform" binding:"required"`
NickName string `form:"nick_name" json:"nick_name" binding:"-"`
HeadImg string `form:"head_img" json:"head_img" binding:"-"`
SessionKey string `form:"session_key" json:"session_key" binding:"-"`
}
type AuthService struct {
Code string `form:"code" json:"code" binding:"required"`
}
const AUTH_SUCCESS_CODE = 0
const DEFAULT_PLATFORM = "wechat-mini" // 默认微信平台
// 获取授权
func (authService *AuthService) Auth(c *gin.Context) (bool, result.Response) {
url := fmt.Sprintf("%s/sns/jscode2session?appid=%s&secret=%s&js_code=%s&grant_type=authorization_code",
config.Param("MINI_WECHAT_AUTH_URL"), config.Param("MINI_WECHAT_APPID"), config.Param("MINI_WECHAT_SECRET"), authService.Code)
// 获取url结果
resObj := format.WechatAuthInfoFormat{}
fmt.Println(url)
res := helpers.Get(url)
fmt.Println(res)
// 把结果转成json
json.Unmarshal([]byte(res), &resObj)
// 如果错误码不等于0就是出错
if resObj.Errcode != AUTH_SUCCESS_CODE {
return false, result.Response{Code: code.AuthError, Message: resObj.Errmsg}
}
loginService := LoginService{
Openid: resObj.Openid,
Platform: DEFAULT_PLATFORM,
NickName: "",
HeadImg: "",
SessionKey: resObj.SessionKey,
}
return loginService.Login(c)
}
// 登录方法
func (loginService *LoginService) Login(c *gin.Context) (bool, result.Response) {
user, _ := models.UserByOpenid(loginService.Openid)
if user.ID == 0 {
// 没有用户,添加用户记录
_, err := models.CreateUser(&models.User{
Openid: loginService.Openid,
Platform: loginService.Platform,
NickName: loginService.NickName,
HeadImg: loginService.HeadImg,
Ip: result.IP(c),
LastLoginAt: time.Now(),
SessionKey: loginService.SessionKey,
})
if err != nil {
return false, result.Response{Code: code.UserCreateError}
}
} else {
// 更新用户信息
err := models.ModifyUser(&models.User{
ID: user.ID,
NickName: loginService.NickName,
HeadImg: loginService.HeadImg,
Ip: result.IP(c),
LastLoginAt: time.Now(),
SessionKey: loginService.SessionKey,
})
if err != nil {
return false, result.Response{Code: code.UserModifyError, Message: err.Error()}
}
}
// 构造创建token参数
claims := jwt.MapClaims{
"openid": loginService.Openid,
"userid": user.ID,
}
token, expire, err := helpers.CreateToken(claims)
if err != nil {
return false, result.Response{Code: code.CreateTokenError}
}
// 构造返回参数
data := format.LoginSuccessFormat{
Token: token,
Expire: expire,
}
// 生成token
return true, result.Response{
Data: data,
}
}
Go
1
https://gitee.com/xu_zhong_yan/express_back.git
git@gitee.com:xu_zhong_yan/express_back.git
xu_zhong_yan
express_back
express_back
v1.0.3

搜索帮助