Функция check_password_hash
Функция check_password_hash применяется для проверки пароля пользователя при аутентификации. Первым параметром передаётся хеш пароля, который был сохранён ранее с помощью функции generate_password_hash. Вторым параметром передаётся пароль в открытом виде, введённый пользователем. Функция возвращает True, если пароль совпадает с хешем, и False в противном случае. Алгоритм хеширования определяется автоматически из формата переданного хеша.
Синтаксис
check_password_hash(pwhash, password)
Пример
Давайте создадим хеш пароля и проверим его с помощью функции check_password_hash:
from flask import Flask
from werkzeug.security import generate_password_hash, check_password_hash
app = Flask(__name__)
password = 'abcde'
password_hash = generate_password_hash(password)
@app.route('/')
def index():
res = check_password_hash(password_hash, password)
return str(res)
Результат выполнения кода:
True
Пример
Давайте проверим неверный пароль:
from flask import Flask
from werkzeug.security import generate_password_hash, check_password_hash
app = Flask(__name__)
password = 'abcde'
password_hash = generate_password_hash(password)
@app.route('/')
def index():
res = check_password_hash(password_hash, 'wrong')
return str(res)
Результат выполнения кода:
False
Пример
Давайте применим функцию в связке с login_user для аутентификации пользователя:
from flask import Flask, request, redirect, url_for
from flask_login import LoginManager, UserMixin, login_user
from werkzeug.security import generate_password_hash, check_password_hash
app = Flask(__name__)
app.secret_key = 'secret'
login_manager = LoginManager(app)
users = {
'user': {
'password_hash': generate_password_hash('abcde')
}
}
class User(UserMixin):
def __init__(self, username):
self.id = username
@login_manager.user_loader
def load_user(user_id):
return User(user_id)
@app.route('/login', methods=['POST'])
def login():
username = request.form['username']
password = request.form['password']
user_data = users.get(username)
if user_data and check_password_hash(user_data['password_hash'], password):
login_user(User(username))
return 'logged in'
return 'invalid credentials'
Результат выполнения кода при верных данных:
logged in
Смотрите также
-
функцию
generate_password_hash,
которая создаёт хеш пароля -
функцию
login_user,
которая выполняет вход пользователя -
метод
user_loader,
который загружает пользователя по идентификатору -
класс
UserMixin,
который добавляет стандартные методы пользователю