0

我想了解@auth.verify_password 装饰器在此程序中的使用方式和时间。如果我导航到路由http://127.0.0.1:5000,我知道我需要传入用户名和密码,@auth.login_required 将对其进行验证,但 @auth.verify_password 来自哪里?

@auth.login_required 会调用它吗?

#!/usr/bin/env python
from flask import Flask
from flask_httpauth import HTTPBasicAuth
from werkzeug.security import generate_password_hash, check_password_hash

app = Flask(__name__)
auth = HTTPBasicAuth()

users = {
    "john": generate_password_hash("hello"),
    "susan": generate_password_hash("bye")
}


@auth.verify_password
def verify_password(username, password):
    if username in users:
        return check_password_hash(users.get(username), password)
    return False


@app.route('/')
@auth.login_required
def index():
    return "Hello, %s!" % auth.username()


if __name__ == '__main__':
    app.run()
4

1 回答 1

1

文档中

验证密码(验证密码回调)

如果定义,框架将调用此回调函数来验证客户端提供的用户名和密码组合是否有效。回调函数接受两个参数,用户名和密码,并且必须返回 True 或 False。

因此,您基本上提供了该功能,以便您的程序能够验证用户提供的凭据。

装饰器login_required通过读取用户提供的身份验证凭据并将它们传递给您的verify_password函数进行验证来保护路由。

于 2017-03-26T01:13:21.170 回答