Flask: активация пользовательского аккаунта

Классическая задача — реализовать подтверждение аккаунта по электронной почте. Как можно это сделать просто и безопасно во Flask?

Для активации пользовательского аккаунта во Flask удобно использовать Python-модуль itsdangerous. Он предоставляет возможность криптографически подписывать данные и передавать их клиенту. Когда вы получаете данные обратно, можете легко убедиться, что они не были искажены.

По умолчанию itsdangerous использует алгоритмы HMAC и SHA1 для электронной подписи.

Код

import itsdangerous
from flask import abort, current_app
from flask import url_for

from . import user_blueprint

serializer = itsdangerous.URLSafeSerializer(secret_key=current_app.config['SECRET_KEY'])
ACTIVATION_SALT = 'activate-salt'


def get_activation_link(user):
    return url_for('activate', code=serializer.dumps(user.user_id, salt=ACTIVATION_SALT))


@user_blueprint.route('/activate/<code>')
def activate(code):
    try:
        user_id = serializer.loads(code, salt=ACTIVATION_SALT)
    except itsdangerous.BadSignature:
        abort(404)
    else:
        activate_user(user_id)  # your activation steps

ACTIVATION_SALT — нечто вроде пространства имен. Не так страшно, если соль станет известна злоумышленнику. Решающее значение имеет секретный ключ, который мы получаем из конфигурации — current_app.config['SECRET_KEY'].