2019-06-17【暗号化モジュール:itsdangerous】
2305 ワード
前に書く
プロジェクトをする時、ユーザーの登録は1つの検証の接続をユーザーに送る必要があって、検証の接続はユーザーの情報を携帯する必要があって、URLの中で直接ユーザー名あるいはユーザーidを明示的に表示することを避けて、一部のユーザーの悪意のある攻撃を防止して、itsdangerousを使ってユーザー名あるいはidに対して暗号化します
itsdangerous使用 itsdangerous をインストール暗号化情報 復号情報 期限切れ時間期限切れになってから復号するとエラーが発生します.エラータイプはSignatureExpiredです.次の図:
itsdangerousユーザー登録でユーザー検証メールを送信する使用
1、Djangoのプロファイルsettings.pyにSECRET_があるKEY,直接使用可能2、復号中にSignatureExpiredのエラーをキャプチャする必要があるメールを送信する前に暗号化(一部コード表示): メール送信後の復号化(一部コード表示):
プロジェクトをする時、ユーザーの登録は1つの検証の接続をユーザーに送る必要があって、検証の接続はユーザーの情報を携帯する必要があって、URLの中で直接ユーザー名あるいはユーザーidを明示的に表示することを避けて、一部のユーザーの悪意のある攻撃を防止して、itsdangerousを使ってユーザー名あるいはidに対して暗号化します
itsdangerous使用
pip install itsdangerous
from itsdangerous import TimedJSONWebSignatureSerializer as Serializer
serializer = Serializer('secret', 3600)# Serializer ,secret , ,3600 , s
info = {'confirm': 1}
token = serializer.dumps(info) # , serializer_obj.dumps() , bytes
token = token.decode() # bytes utf-8, decode
print(token)
# eyJhbGciOiJIUzUxMiIsImlhdCI6MTU2MDc3MjYxNCwiZXhwIjoxNTYwNzc2MjE0fQ.eyJjb25maXJtIjoxfQ.8A_GU0nxqQuLMVmE6l5mAzno-LjsNWTMNAYm4i_WdTbg5bRtZwLk7vc6LpKRMkcfRYnK7vUo-DB7k_4daiVuXw
serializer = Serializer('secret', 3600)
token = serializer.loads(token)
print(token)
# {'confirm': 1}
from itsdangerous import TimedJSONWebSignatureSerializer as Serializer
import time
#
serializer = Serializer('secret',5)
info = {'confirm': 1}
token = serializer.dumps(info) # bytes
token = token.decode() # bytes utf-8, decode
#
serializer = Serializer('secret',5)
time.sleep(6)
token = serializer.loads(token)
# itsdangerous.exc.SignatureExpired: Signature expired
itsdangerousユーザー登録でユーザー検証メールを送信する使用
1、Djangoのプロファイルsettings.pyにSECRET_があるKEY,直接使用可能2、復号中にSignatureExpiredのエラーをキャプチャする必要がある
serializer = Serializer(settings.SECRET_KEY, 3600)
info = {'confirm': user.id}
token = serializer.dumps(info)#bytes
token = token.decode()
serializer = Serializer(settings.SECRET_KEY, 3600)
try:
info = serializer.loads(token)
# id
user_id = info['confirm']
# id
user = User.objects.get(id=user_id)
user.is_active = 1
user.save()
#
return redirect(reverse('user:login'))
except SignatureExpired as e:
#
return HttpResponse(' ')