使用 Flask-Login 进行身份验证 url 路由
Authentication url routing with Flask-Login
我正在为我的项目使用 flask-login。
对于我的 uri,我正在使用
/user/<string:user_id>/
当我想访问特定用户的资源时。
问题在于,flask-login 仅提供 @login-required
使用 cookie 的身份验证。也就是说,我只能检查用户是否登录。因此,我必须制作一个单独的功能来防止用户访问 urls 不同的 user_id
.
例如,仅使用 @login-required
来保护我的观点允许 ID 为 user1
的用户访问 /user/user2
。
我应该如何进行单独的身份验证以检查当前用户是否可以访问特定用户url?
Flask-Login
为您提供了一个 current_user
全局,您可以使用它来检查哪个用户正在访问某个端点并检索他们的 id
。用它来决定用户是否可以访问某个页面。
你的终点就变成了
@login_required
@app.route('/user/<string:user_id>')
def user_account(user_id):
if user_id == current_user.id:
user = fetch_user_from_storage(user_id)
return render_template('user_account.html', user=user)
else:
flash('You do not have access to this page.')
# redirect user to another page
使用此实现,用户 #1 将无法访问用户 #2 的数据,因为 current_user.id
只会匹配用户 #1 的 id
。
有关 current_user
的更多信息,请参阅 flask-login
的 docs 中的第一个示例。
如果您需要更高级的访问控制,请查看 flask-security or flask-principal。
我正在为我的项目使用 flask-login。
对于我的 uri,我正在使用
/user/<string:user_id>/
当我想访问特定用户的资源时。
问题在于,flask-login 仅提供 @login-required
使用 cookie 的身份验证。也就是说,我只能检查用户是否登录。因此,我必须制作一个单独的功能来防止用户访问 urls 不同的 user_id
.
例如,仅使用 @login-required
来保护我的观点允许 ID 为 user1
的用户访问 /user/user2
。
我应该如何进行单独的身份验证以检查当前用户是否可以访问特定用户url?
Flask-Login
为您提供了一个 current_user
全局,您可以使用它来检查哪个用户正在访问某个端点并检索他们的 id
。用它来决定用户是否可以访问某个页面。
你的终点就变成了
@login_required
@app.route('/user/<string:user_id>')
def user_account(user_id):
if user_id == current_user.id:
user = fetch_user_from_storage(user_id)
return render_template('user_account.html', user=user)
else:
flash('You do not have access to this page.')
# redirect user to another page
使用此实现,用户 #1 将无法访问用户 #2 的数据,因为 current_user.id
只会匹配用户 #1 的 id
。
有关 current_user
的更多信息,请参阅 flask-login
的 docs 中的第一个示例。
如果您需要更高级的访问控制,请查看 flask-security or flask-principal。