身份验证令牌仅适用于一个ID

时间:2015-06-27 05:00:28

标签: python authentication flask restful-authentication

我正在使用本教程将authentication合并到我的apphttp://blog.miguelgrinberg.com/post/restful-authentication-with-flask

目前我有以下route

@app.route('/checkin/venue/<int:venue_id>', methods = ['POST'])
@auth.login_required

我的verify_password函数与教程中指定的函数非常相似,只是我正在访问我自己的db

问题在于,当我生成token时,即使使用单个{{1}的凭据生成venue_id,也可以在多个token中使用它}。

我是否可以将venue变量传递给函数venue_id,因此当我致电verify_password(email_or_token, password)时,我将能够检查verify_auth_token编码的venue_id令牌实际上对应于呼叫中的令牌:

@app.route('/checkin/venue/<int:venue_id>', methods = ['POST'])

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

你没有明确说出来,但我认为你在令牌中有venue_id,对吗?如果没有,你应该添加它。令牌可以存储您想要的任何数据,因此除了venue_id之外还添加user_id

所以你需要的是将请求URL中给出的venue_id与令牌中的request.view_args['venue_id']进行比较。这很容易做到,因为您可以访问网址中的地址ID User.verify_auth_token(token)

因此,假设您遵循我的教程中的设计,您现在有一个venue_id方法来解码令牌并对其进行验证。您可以向此方法添加verify_password的参数,并将该验证合并到该方法的逻辑中。

然后在您的@auth.verify_password def verify_password(token, password): user = User.verify_auth_token(token, request.view_args.get('venue_id', 0)) if not user: return False g.user = user return True 回调中,您可以执行以下操作:

venue_id

请注意,对于不包含venue_id参数的请求,我选择了默认值0。这只是为了避免崩溃。在您的验证功能中,您可以选择接受QUOTIENT(A1:A3 + 0,4) WORKDAY(A1:A3 + 0,7) N(A1:C3 + 0) 0表示此请求适用于所有场地,因此在这种情况下,您可以跳过对场地的检查。

希望这有帮助!