调用 restful api 需要通过 httpauth ,而站点使用 flask-login 管理用户登录。如何让已经登录的用户跳过 httpauth 呢? current_user.is_authenticated ()能实现吗?
@api.before_request
@auth.login_required
def before_request ():
if not g.current_user.is_anonymous and \
not g.current_user.confirmed:
return forbidden ('Unconfirmed account')
补全代码
@auth.verify_password
def verify_password(email_or_token, password):
if email_or_token == '':
g.current_user = AnonymousUser()
return True
if password == '':
g.current_user = User.verify_auth_token(email_or_token)
g.token_used = True
return g.current_user is not None
user = User.query.filter_by(email=email_or_token).first()
if not user:
return False
g.current_user = user
g.token_used = False
return user.verify_password(password)
1
jakes 2015-08-18 13:04:11 +08:00 1
我的做法是在 flask-login 登录成功后产生一个用于 httpauth 授权的 token ,保存在 cookie 中。当请求是 RESTful API 时附带上 token 做验证,退出登录时删除该 token 。
目前没想到什么好方法完美解决,期待楼下提供更为恰当的方法。也许需要写一个包含了 httpauth 授权和 flask-login 功能的 flask 插件吧? |