Python 在何处储存用于电子邮件确认中生成令牌的密钥
我在ruby中有以下源代码: 我试图建立一个大致相似的类。 我有一个端点:Python 在何处储存用于电子邮件确认中生成令牌的密钥,python,ruby,flask,libsodium,pynacl,Python,Ruby,Flask,Libsodium,Pynacl,我在ruby中有以下源代码: 我试图建立一个大致相似的类。 我有一个端点: @register_endpoint.route('/', methods=['POST']) def process_signup_form(): form = InitializeAccountForm(request.form) if form.validate_on_submit(): email = form.email.data first_name = fo
@register_endpoint.route('/', methods=['POST'])
def process_signup_form():
form = InitializeAccountForm(request.form)
if form.validate_on_submit():
email = form.email.data
first_name = form.first_name.data
# TODO add exception if the email doesn't land
response = verify_email_account(first_name, email)
return render_template("auth/register.html", form=form)
else:
return render_template("auth/register.html", form=form)
发送包含使用此类生成的令牌的链接的电子邮件:
class SecureMessage:
def __init__(self):
self.key = nacl.utils.random(nacl.secret.SecretBox.KEY_SIZE)
def encrypt(self, message):
if message:
box = nacl.secret.SecretBox(self.key)
cypher_text = box.encrypt(bytes(message, "utf-8"))
encoded_cypher_text = base64.urlsafe_b64encode(cypher_text)
return encoded_cypher_text
else:
return None
def decrypt(self, token64):
if token64:
token = base64.urlsafe_b64decode(token64)
box = nacl.secret.SecretBox(self.key)
decrypted_token = box.decrypt(token)
return decrypted_token
else:
return None
我还有另一个端点,假设它将解密先前生成的令牌:
@register_endpoint.route('/<string:token>', methods=['GET'])
def display_register_form(token):
error = None
decrypted_token = SecureMessage().decrypt(token)
form = RegisterAccountForm(decrypted_token)
return render_template("auth/register.html", form=form, error=error)
@register\u endpoint.route('/',methods=['GET'])
def显示登记表(令牌):
错误=无
解密的\u令牌=SecureMessage()。解密(令牌)
form=RegisterAccountForm(解密的\u令牌)
返回呈现模板(“auth/register.html”,form=form,error=error)
我真的不知道在我的flask环境中把我的密钥存储在哪里,也不知道密钥在ruby代码中存储在哪里
你能告诉我存储我的钥匙的最佳安全方式是什么吗
编辑:
我有以下流程:
我的问题是如何存储加密/解密过程中使用的对称密钥?我建议在用户表中添加两个字段
verified
verified\u令牌
将生成的令牌保存到
verified_-token
。当用户验证电子邮件地址时,将verified
设置为true
,并使用存储。您是指持久层还是仅在当前请求的会话中?@LuisOrduz我将我的问题编辑为moire-specific如果用户未确认,我不想将其保存到我的数据库中rm他的帐户。因此,我的流程如下:用户使用他的名字和电子邮件注册,我使用对称密钥加密生成的JSON,并从中生成令牌。令牌通过电子邮件发送到链接中。用户单击链接,然后URL中的令牌将使用以前的对称密钥解密,以预填充字段first\u name和电子邮件,然后用户将能够填写其他字段,如密码等。当用户发布此请求时。我创建了一个帐户。我的问题是如何存储对称密钥。