Restful API不保存状态,无法依赖Cookie及Session来保存用户信息,自然也无法使用Flask-Login扩展来实现用户认证。所以这里,我们就要介绍另一个扩展,Flask-HTTPAuth。
pip install flask-httpauth
接下来创建扩展对象实例:
from flask import Flask
from flask_httpauth import HTTPBasicAuth
app = Flask(__name__)
auth = HTTPBasicAuth()
注意,初始化实例时不需要传入app对象,也不需要调用”auth.init_app(app)”注入应用对象。另外,Flask-HTTPAuth提供了几种不同的Auth方法,比如HTTPBasicAuth,HTTPTokenAuth,MultiAuth和HTTPDigestAuth。上例中我们使用了HTTPBasicAuth,下文中也会分别介绍HTTPTokenAuth和MultiAuth
用户名及密码验证
我们所要做的,就是实现一个根据用户名获取密码的回调函数:
users = [
{'username': 'Tom', 'password': '111111'},
{'username': 'Michael', 'password': '123456'}
]
@auth.get_password
def get_password(username):
for user in users:
if user['username'] == username:
return user['password']
return None
回调函数”get_password()”由装饰器”@auth.get_password”修饰。在函数里,我们根据传入的用户名,返回其密码;如果用户不存在,则返回空。接下来,我们就可以在任一视图函数上,加上”@auth.login_required”装饰器,来表示该视图需要认证:
@app.route('/')
@auth.login_required
def index():
return "Hello, %s!" % auth.username()
启动该应用,当你在浏览器里打开”http://localhost:5000/”,你会发现浏览器跳出了下面的登录框,输入正确的用户名密码(比如上例中的Tom:111111)后,”Hello Tom!”的字样才会显示出来。