python - 身份验证 token 仅适用于一个 ID

标签 python authentication flask restful-authentication

我正在使用本教程将身份验证合并到我的应用中:http://blog.miguelgrinberg.com/post/restful-authentication-with-flask

目前我有以下路线:

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

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

问题是,当我生成一个 token 时,它可以在多个 venue_id 中使用,即使 token 是使用单个 field 的凭据。

有没有一种方法可以将 venue_id 变量传递给函数 verify_password(email_or_token, password) 所以当我调用 verify_auth_token 时我将能够检查 token 中编码的 venue_id 是否与调用中的实际对应:

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

感谢您的帮助。

最佳答案

您没有明确说明这一点,但我假设您在 token 中有 venue_id,对吗?如果没有,您应该添加它。该 token 可以存储您想要的任何数据,因此除了 user_id 之外,还可以在其中添加 venue_id

因此,您需要将请求 URL 中给出的 venue_id 与 token 中的进行比较。这很容易做到,因为您可以通过 request.view_args['venue_id'] 在您的 URL 中访问 field ID。

假设您按照我的教程中的设计进行操作,您现在有一个 User.verify_auth_token(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 参数的请求,我选择了默认值 0。这只是为了避免崩溃。在您的验证函数中,您可以选择接受 0 的 venue_id,这意味着此请求适用于所有场所,因此在这种情况下您可以跳过对场所的检查。

希望这对您有所帮助!

关于python - 身份验证 token 仅适用于一个 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31085328/

相关文章:

python - 我正在尝试为添加按钮制定 Xpath 或 CSS

python - 如何替换 read_csv 中的 nan 值?

azure - MSAL Azure B2C : which field do I send as bearer token to make authorized API requests?

facebook - Perl - 身份验证图 API 循环

python - 游戏的 flask 计数器

python - flask run 与 python

python - 在 PySide2 中设置垂直和水平对齐方式

php登录 session

python - 如何获取 Flask 请求 JSON 数据作为字典?

python - 使用OpenCV连接USB摄像头