func (ut *UserToken) DecodeToken(crypto *gokits.Crypto, token string) bool { bs, err := base64.URLEncoding.DecodeString(token) if err != nil { return false } // decrypt var tbs []byte tbs, err = crypto.Decrypt(bs) if err != nil { log.Error("Decrypt failed ", err.Error()) return false } // check the len if l := len(tbs); l != TokenLen { log.Error("Invalid length ", l) return false } ut.Flag = TokenFlag(tbs[0]) // remain bytes buf := bytes.NewReader(tbs[1:]) // read uid if err := binary.Read(buf, binary.BigEndian, &ut.Uid); err != nil { log.Error("Read uid failed ", err.Error()) return false } // ip ip := make([]byte, 4) buf.Read(ip) ut.ClientIP = net.IP(ip).String() //log.Info("token ip ", ut.ClientIP) // gen time if err := binary.Read(buf, binary.BigEndian, &ut.GenTime); err != nil { log.Error("Read generate time failed ", err.Error()) return false } // expire time if err := binary.Read(buf, binary.BigEndian, &ut.Expire); err != nil { log.Error("Read expire time failed ", err.Error()) return false } return true }