作者 唐旭辉

token更新

... ... @@ -34,7 +34,7 @@ func (this *BaseController) Prepare() {
func (this *BaseController) GetAppHead() (appHead protocol.BaseHeader) {
appHead.AccessToken = this.Ctx.Input.Header(protocol.HeaderAccessToken)
appHead.RefreshToken = this.Ctx.Input.Header(protocol.HeaderRefreshToken)
//appHead.RefreshToken = this.Ctx.Input.Header(protocol.HeaderRefreshToken)
return
}
... ...
... ... @@ -18,8 +18,8 @@ import (
var LogRequestData = func(ctx *context.Context) {
log.Info("====>Recv Request:%s", ctx.Input.URI())
hmap := map[string]string{
protocol.HeaderAccessToken: ctx.Input.Header(protocol.HeaderAccessToken),
protocol.HeaderRefreshToken: ctx.Input.Header(protocol.HeaderRefreshToken),
protocol.HeaderAccessToken: ctx.Input.Header(protocol.HeaderAccessToken),
//protocol.HeaderRefreshToken: ctx.Input.Header(protocol.HeaderRefreshToken),
}
if ctx.Input.RequestBody != nil {
log.Info("====>Recv data from client:\nHeadData: %v \nBodyData: %s", hmap, string(ctx.Input.RequestBody))
... ... @@ -38,7 +38,7 @@ var AuthToken = func(ctx *context.Context) {
mtoken *serveauth.MyToken
)
accesstoken := ctx.Input.Header(protocol.HeaderAccessToken)
refreshToken := ctx.Input.Header(protocol.HeaderRefreshToken)
// refreshToken := ctx.Input.Header(protocol.HeaderRefreshToken)
mtoken, err = serveauth.ValidJWTToken(accesstoken)
if accesstoken == "123456" && beego.BConfig.RunMode != "prod" {
return
... ... @@ -47,14 +47,14 @@ var AuthToken = func(ctx *context.Context) {
storetoken, err = redisdata.GetLoginToken(mtoken.UID)
if err != nil {
log.Error("redisdata.GetLoginToken err:%s", err)
msg = protocol.NewMesage("10024")
msg = protocol.NewMessage("10024")
ctx.Output.JSON(msg, false, false)
return
}
if beego.BConfig.RunMode == "prod" {
//校验是否是单客户端操作
if storetoken.AccessToken != accesstoken {
msg = protocol.NewMesage("10025")
msg = protocol.NewMessage("10025")
ctx.Output.JSON(msg, false, false)
return
}
... ... @@ -64,14 +64,12 @@ var AuthToken = func(ctx *context.Context) {
return
}
if ok := serveauth.IsJwtErrorExpired(err); ok {
//token过期,刷新
logintoken, err := serveauth.RefreshLoginToken(refreshToken)
msg = protocol.NewReturnResponse(logintoken, err)
msg := protocol.NewMessage("10024")
ctx.Output.JSON(msg, false, false)
return
}
log.Error("token 校验失败")
msg = protocol.NewMesage("1")
log.Error("token 校验失败:%s", err)
msg = protocol.NewMessage("10024")
ctx.Output.JSON(msg, false, false)
return
}
... ...
... ... @@ -2,7 +2,8 @@ package protocol
//指定的请求头字段
const (
HeaderAccessToken string = "x-mmm-accesstoken"
// HeaderAccessToken string = "x-mmm-accesstoken"
HeaderAccessToken string = "Authorization"
HeaderRefreshToken string = "x-mmm-refreshtoken"
)
... ...
... ... @@ -32,7 +32,7 @@ type ResponseMessage struct {
Data interface{} `json:"data"`
}
func NewMesage(code string) *ResponseMessage {
func NewMessage(code string) *ResponseMessage {
ecode := SearchErr(code)
rsp := &ResponseMessage{
Errno: transformCode(ecode.Errno),
... ... @@ -79,7 +79,7 @@ func (e ErrWithMessage) Unwrap() error {
//ParseToMessage 实现CustomErrParse的接口
func (e ErrWithMessage) ParseToMessage() *ResponseMessage {
return NewMesage(e.Errno)
return NewMessage(e.Errno)
}
func SearchErr(code string) ErrorCode {
... ... @@ -90,7 +90,7 @@ func SearchErr(code string) ErrorCode {
func NewReturnResponse(data interface{}, eRR error) (msg *ResponseMessage) {
// var msg *ResponseMessage
if eRR == nil {
msg = NewMesage("0")
msg = NewMessage("0")
msg.Data = data
return msg
}
... ... @@ -98,12 +98,12 @@ func NewReturnResponse(data interface{}, eRR error) (msg *ResponseMessage) {
return x.ParseToMessage()
}
return NewMesage("1")
return NewMessage("1")
}
//BadRequestParam 控制层响应返回
func BadRequestParam(code string) *ResponseMessage {
return NewMesage(code)
return NewMessage(code)
}
//NewPageDataResponse 控制层分页数据响应返回
... ... @@ -112,9 +112,9 @@ func NewPageDataResponse(data interface{}, eRR error) (msg *ResponseMessage) {
if x, ok := eRR.(CustomErrParse); ok {
return x.ParseToMessage()
}
return NewMesage("1")
return NewMessage("1")
}
msg = NewMesage("0")
msg = NewMessage("0")
msg.Data = map[string]interface{}{
"gridResult": data,
}
... ...
... ... @@ -6,7 +6,7 @@ import (
)
func Test_Err(t *testing.T) {
errmsg := NewMesage("0")
errmsg := NewMessage("0")
bt1, _ := json.Marshal(errmsg)
t.Log(string(bt1))
normalmsg := NewErrWithMessage("0")
... ...
... ... @@ -15,7 +15,7 @@ var errmessge ErrorMap = map[string]string{
"10023": "用户无使用权限",
"10024": "登录凭证失效",
"10025": "该账号已在其他地方登录",
"10026": "登录凭证过期",
// "10026": "登录凭证过期",
"10027": "无操作权限",
//用户相关
"10031": "无效角色",
... ...
... ... @@ -68,9 +68,9 @@ func GenerateAuthToken(uid int64, companyid int64) (protocol.LoginAuthToken, err
var (
authToken protocol.LoginAuthToken
accesstoken string //主token,请求用
expiresIn int64 = 60 * 30 //主token过期时间,30分钟
expiresIn int64 = 60 * 60 * 2 //主token过期时间,30分钟
refreshtoken string //副token,刷新主token用
refreshExpires int64 = 60 * 30 * 2 //副token 过期时间 ,60分钟
refreshExpires int64 = 60 * 60 * 2 //副token 过期时间 ,60分钟
err error
nowtime = time.Now()
)
... ...
... ... @@ -9,5 +9,4 @@ type RedisLoginToken struct {
AccessToken string `json:"access_token"`
RefreshToken string `json:"refresh_token"`
CurrentCompany int64 `json:"current_company"`
IsOk bool `json:"-"`
}
... ...
... ... @@ -23,7 +23,6 @@ func SetLoginToken(param protocol.LoginAuthToken, userid int64, companyid int64)
AccessToken: param.AccessToken,
RefreshToken: param.RefreshToken,
CurrentCompany: companyid,
IsOk: true,
}
value, _ = json.Marshal(data)
exp = param.RefreshExpires - nowTime
... ... @@ -67,8 +66,26 @@ func ExistLoginToken(userid int64) bool {
func DeleteLoginToken(userid int64) error {
client := redis.GetRedis()
key := fmt.Sprintf("%s%s:%d", KEY_PREFIX, KEY_USER_TOKEN, userid)
err:=client.Del(key).Err()
err := client.Del(key).Err()
return err
}
// 刷新token 的有效期
func RefreshLoginTokenExpires(userid int64) error {
client := redis.GetRedis()
key := fmt.Sprintf("%s%s:%d", KEY_PREFIX, KEY_USER_TOKEN, userid)
result, err := client.Exists(key).Result()
if err != nil {
return err
}
if result == 0 {
return nil
}
_, err = client.Expire(key, 30*time.Minute).Result()
if err != nil {
return err
}
return nil
}
//消息发布订阅
... ...