anwenhu/zhixuewang-python

账号持久化

Closed this issue · 4 comments

在不保存用户密码的情况下可保持账号的登录状态

智学网不知道支不支持token过期后可续时长这个功能...
如果不支持,我觉得有一种变相的持久化,上一下伪代码:

file = "test.usr"
AESKey = "123456"

# uid: 用户名
# upwd: 密码
# uToken: 密钥(get_token())
# expireMinutes: 过期时间
def _write_user_prof(uid: str, upwd: str, uToken: str, expireMinutes: str = 30):
    AES_write(file, uid + ";" + upwd + ";" + uToken + ";" + expireMinutes, AESKey) #AES加密用户存档文件
def _read_user_prof(uName: str): #读取用户存档文件,返回token
    if exists(uName + ".usr") is False: #文件不存在
        raise Exception()
    else:
        details = AES_read(file, AESKey).Split(';')
        if _isExpired() is True: #密钥过期了
            usr = login(details[0],details[1])
            return get_token(usr)
        else:
            return details[2]

这样,虽然密码保存了,但是依然是安全的,只要AES密钥不泄露。

@MasterYuan418 研究了一下. 登录的时候会有tgt和st, 其中st会过期, 但tgt貌似不会, 如果st过期了可通过带tgt访问特定接口重新获取st.

@anwenhu 那就可以在本地用userId字段加密存储tgt,过期时间和token,第二次启动的时候只需要用userId解密,然后判断是否过期,未过期就直接返回token,过期就续期一下(当然,上述言论均是在嘴炮)

经测试, tgt 过期时间不到一天