func (ut *UserToken) DecodeToken(crypto *tkits.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 { return false } // check the len if len(tbs) != TokenLen { 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 { return false } // ip var ip net.IP buf.Read([]byte(ip)) ut.ClientIP = ip.String() // gen time if err := binary.Read(buf, binary.BigEndian, &ut.GenTime); err != nil { return false } // gen time if err := binary.Read(buf, binary.BigEndian, &ut.Expire); err != nil { return false } return true }