首页 > 解决方案 > 使用 Flask-Login 进行身份验证 url 路由

问题描述

我正在为我的项目使用烧瓶登录。

对于我的uri,我正在使用

/user/<string:user_id>/ 

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

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

例如,仅@login-required用于保护我的视图允许具有 id 的用户user1访问/user/user2.

我应该如何进行这种单独的身份验证来检查当前用户是否可以访问特定的用户 url?

标签: flaskflask-restfulflask-login

解决方案


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-securityflask-principal 。


推荐阅读