代码拉取完成,页面将自动刷新
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,
}
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。