目前,我正在使用itsdangerous生成时间上的json签名,作为用户对auth和resetpassword的令牌,下面是代码:
from itsdangerous import TimedJSONWebSignatureSerializer as Serializer
class SampleCode:
def generate_confirmation_token(self, expiration=600):
s = Serializer(current_app.config['SECRET_KEY'], expires_in=expiration)
return s.dumps({'confirm': self.id}).decode('utf-8')
def confirm(self, token):
s = Serializer(current_app.config['SECRET_KEY'])
try:
data = s.loads(token.encode('utf-8'))
except:
return False
if data.get('confirm') != self.id:
return False
self.confirmed = True
db.session.add(self)
return True由于TimedJSONWebSignatureSerializer是已弃用并在itsdangerous 2.1.0中删除,我想我可能需要转到其他提供JWT/JWS接口的库。
我有两位候选人,其中一位更好:
发布于 2022-05-02 18:49:46
哪个库将被评为“更好”,这在很大程度上取决于用例。
如果您想保持简洁,我建议您使用pyjwt。设置过期时间很容易,而在authlib JWS文档中却找不到适合该选项的标志。因此,只需按以下方式更改代码:
import jwt
import datetime
class SampleCode:
def generate_confirmation_token(self, expiration=600):
reset_token = jwt.encode(
{
"confirm": self.id,
"exp": datetime.datetime.now(tz=datetime.timezone.utc)
+ datetime.timedelta(seconds=expiration)
},
current_app.config['SECRET_KEY'],
algorithm="HS256"
)
return reset_token
def confirm(self, token):
try:
data = jwt.decode(
token,
current_app.config['SECRET_KEY'],
leeway=datetime.timedelta(seconds=10),
algorithms=["HS256"]
)
except:
return False
if data.get('confirm') != self.id:
return False
self.confirmed = True
db.session.add(self)
return True希望我能帮忙!
https://stackoverflow.com/questions/71292764
复制相似问题