flask - 使用 Flask-Login 进行身份验证 url 路由
问题描述
我正在为我的项目使用烧瓶登录。
对于我的uri,我正在使用
/user/<string:user_id>/
当我想访问特定用户的资源时。
问题是,flask-login 只提供@login-required
使用 cookie 的身份验证。也就是说,我只能检查用户是否登录。因此,我必须创建一个单独的函数来防止用户访问不同的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
。
有关更多信息,请参阅flask-login
的文档中的第一个示例current_user
。
如果您需要更高级的访问控制,请查看flask-security或flask-principal 。
推荐阅读
- sas - 如何在存储过程中进行联合?
- flutter - 如何在 Flutter 中的 Button Click 上导航 pageview.builder 内的卡片小部件
- r - 在 R shiny 中,使用 tidyverse 包的 tibble 功能时,为什么我的应用程序崩溃了?
- api - Pinterest API - 如何创建 V3 或 V4 应用程序(非 v5 Beta)
- javascript - 在 JavaScript 中将字符串转换为日期以允许比较
- python - error_bad_lines 参数已被弃用,并将在未来版本中删除。(蟒蛇熊猫)
- python - 如何检查列表中的所有单词是否都是python中的大写字母
- windows - 更改文件夹时应用程序图标变为空白
- laravel - 如何在 laravel 上的同一控制器中的其他 url 中的其他函数之间共享 $request 变量
- python - 使用python替换被网络占用的驱动器号,在资源管理器中得到错误的图标