Li *_*Xin 7 flask pyjwt itsdangerous authlib
目前,我正在使用itsdangerous生成定时 json Web 签名作为用户进行身份验证和重置密码等的令牌。以下是代码:
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
Run Code Online (Sandbox Code Playgroud)
由于TimedJSONWebSignatureSerializer已弃用并删除,itsdangerous 2.1.0我认为我可能需要转向提供 JWT/JWS 接口的其他一些库。
这里我有两个候选人,哪一个更好:
Rob*_*off 15
哪个库被评为“更好”很大程度上取决于用例。
如果你想保持简短,我会推荐 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
Run Code Online (Sandbox Code Playgroud)
希望我能帮忙!
| 归档时间: |
|
| 查看次数: |
3766 次 |
| 最近记录: |