理解Flask-HTTPAuth上的装饰器

时间:2017-03-25 20:13:59

标签: flask flask-httpauth

我想了解在这个程序中如何以及何时使用@ 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()

1 个答案:

答案 0 :(得分:0)

来自the documentation

  

verify_password(verify_password_callback)

     

如果已定义,则此回调   函数将由框架调用以验证用户名   客户提供的密码和密码组合有效。该   回调函数有两个参数,用户名和密码   并且必须返回正确或错误。

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

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