身份验证令牌仅适用于一个 ID
Authentication token to only apply to one id
我正在使用本教程将 authentication
合并到我的 app
中:http://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
时,它可以用于多个 venue_id
,即使 token
是使用单个 [=] 的凭据生成的20=].
有没有一种方法可以将 venue_id
变量传递给函数 verify_password(email_or_token, password)
,这样当我调用 verify_auth_token
时,我将能够检查 venue_id
令牌中的编码实际上对应于调用中的编码:
@app.route('/checkin/venue/<int:venue_id>', methods = ['POST'])
感谢您的帮助。
您没有明确说明这一点,但我假设您在令牌中有 venue_id
,对吗?如果没有,您应该添加它。该令牌可以存储您想要的任何数据,因此除了 user_id
.
之外还添加 venue_id
因此,您需要将请求 URL 中给出的 venue_id
与令牌中的进行比较。这很容易做到,因为您可以在 URL 中以 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
参数的请求,我选择了默认值 0。这只是为了避免崩溃。在您的验证功能中,您可以选择接受 venue_id
0,这意味着此请求适用于所有场所,因此在这种情况下您可以跳过对场所的检查。
希望对您有所帮助!
我正在使用本教程将 authentication
合并到我的 app
中:http://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
时,它可以用于多个 venue_id
,即使 token
是使用单个 [=] 的凭据生成的20=].
有没有一种方法可以将 venue_id
变量传递给函数 verify_password(email_or_token, password)
,这样当我调用 verify_auth_token
时,我将能够检查 venue_id
令牌中的编码实际上对应于调用中的编码:
@app.route('/checkin/venue/<int:venue_id>', methods = ['POST'])
感谢您的帮助。
您没有明确说明这一点,但我假设您在令牌中有 venue_id
,对吗?如果没有,您应该添加它。该令牌可以存储您想要的任何数据,因此除了 user_id
.
venue_id
因此,您需要将请求 URL 中给出的 venue_id
与令牌中的进行比较。这很容易做到,因为您可以在 URL 中以 request.view_args['venue_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
参数的请求,我选择了默认值 0。这只是为了避免崩溃。在您的验证功能中,您可以选择接受 venue_id
0,这意味着此请求适用于所有场所,因此在这种情况下您可以跳过对场所的检查。
希望对您有所帮助!