python - 为使用 Flask 发送的电子邮件创建一个安全的退订链接

标签 python email flask

我想生成一个取消订阅链接,用户可以在收到取消订阅该地址的电子邮件时单击该链接。我不想只在链接中包含电子邮件,因为用户可以编辑链接以取消订阅其他人。我看到的大多数电子邮件都会生成某种 token ,并且该网站知道如何将 token 与用户匹配。我如何使用 Flask 生成这样的 token ?

for email in email_lst:
      body = 'unsubscribe link with token'
      msg.attach(MIMEText(body, 'html'))
      more code to send email

最佳答案

Flask 包含库 itsdangerous用于通过对序列化数据进行安全签名来生成 token 。

对于每封电子邮件,生成一个包含要取消订阅的电子邮件的 token ,并创建一个取消订阅路由来接受和解码该 token 以确定要取消订阅的人。

from itsdangerous import URLSafeSerializer, BadData

@app.route('/unsubscribe/<token>')
def unsubscribe(token):
    s = URLSafeSerializer(app.secret_key, salt='unsubscribe')

    try:
        email = s.loads(token)
    except BadData:
        # show an error
        ...

    # unsubscribe
    ...

def send_email():
    s = URLSafeSerializer(app.secret_key, salt='unsubscribe')
    token = s.dumps(user.email)
    url = url_for('unsubscribe', token=token)

    # add the url to your message
    ...

由于 token 已签名,用户可以看到数据但不能更改它,除非 token 无效。

关于python - 为使用 Flask 发送的电子邮件创建一个安全的退订链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38485798/

相关文章:

html - 隐藏在电子邮件中的 block 引用

python - 如何检查请求 POST 中是否存在值?

python - 在 Flask 中保护 REST API

Python - 不带引号的数字列表

php - 向两个地址发送电子邮件?

python - Webcrawler - 使用 Beautiful soup 检查带有 href 的 <a> 标签是否在 li 标签内?

javascript - 使用 Apps 脚本在 onclick 内调用函数

用于微服务的 Django 或 Flask 或 Falcon

python flask : mimic werkzeug FileStorage object

python - 如何将可能包含数字的字符串中的首字母大写