Skip to main content
 首页 » 编程设计

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

2024年08月22日37dflying

我想生成一个取消订阅链接,用户可以在收到取消订阅该地址的电子邮件时单击该链接。我不想只在链接中包含电子邮件,因为用户可以编辑链接以取消订阅其他人。我看到的大多数电子邮件都会生成某种 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 无效。