Python 在何处储存用于电子邮件确认中生成令牌的密钥

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

我在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 = 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代码中存储在哪里

你能告诉我存储我的钥匙的最佳安全方式是什么吗

编辑:

我有以下流程:

  • 用户通过以下方式注册:名字、电子邮件地址/注册账户
  • 我使用对称密钥对JSON:{“first_name”:first_name,“email”:email}(它给我一个URL_安全令牌)进行加密
  • 我通过电子邮件向用户发送链接/注册/
  • 当用户单击电子邮件时,我们检索URL中的令牌,使用相同的前一个对称密钥对其进行解密,并预填充名字和电子邮件字段,然后用户可以填充密码等字段
  • 我们存储用户

  • 我的问题是如何存储加密/解密过程中使用的对称密钥?

    我建议在用户表中添加两个字段

  • verified
  • verified\u令牌

  • 将生成的令牌保存到
    verified_-token
    。当用户验证电子邮件地址时,将
    verified
    设置为
    true

    ,并使用存储。您是指持久层还是仅在当前请求的会话中?@LuisOrduz我将我的问题编辑为moire-specific如果用户未确认,我不想将其保存到我的数据库中rm他的帐户。因此,我的流程如下:用户使用他的名字和电子邮件注册,我使用对称密钥加密生成的JSON,并从中生成令牌。令牌通过电子邮件发送到链接中。用户单击链接,然后URL中的令牌将使用以前的对称密钥解密,以预填充字段first\u name和电子邮件,然后用户将能够填写其他字段,如密码等。当用户发布此请求时。我创建了一个帐户。我的问题是如何存储对称密钥。