问题描述
我正在为我的项目使用flask-login。
对于我的uri,我正在使用
/user/<string:user_id>/
当我想访问特定用户的资源时。
问题在于,flask-login仅使用cookie提供@login-required
身份验证。也就是说,我只能检查用户是否登录。因此,我必须创建一个单独的函数来防止用户使用不同的user_id
访问URL。
例如,仅使用@login-required
保护我的视图就可以使ID为user1
的用户访问/user/user2
。
我应该如何进行单独的身份验证,以检查当前用户是否有权访问特定的用户网址?
解决方法
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
的{{3}}中的第一个示例。
如果需要更高级的访问控制,请查看docs或flask-security。