使用Flask登录进行身份验证url路由



我的项目使用flask登录。

对于我的uri,我正在使用

/user/<string:user_id>/ 

当我想访问特定于某个用户的资源时。

问题是,flask登录只提供使用cookie的@login-required身份验证。也就是说,我只能检查用户是否登录。因此,我必须制作一个单独的函数来防止用户访问具有不同user_id的URL。

例如,仅使用@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文档中的第一个示例。

如果您需要更高级的访问控制,请查看烧瓶安全性或烧瓶主体。

最新更新