这是我第一个如此裸露的 API。
当我发现 GraphQL 时,我正在开发一个用 Flask 制作的 RESTful API 来与我的 React 前端交互。作为一种节省网络资源的好方法,我决定改用它。我选择 Ariadne 是因为有一种简单的方法可以将它与 Flask 集成。
但是,在更改所有逻辑以使用 Ariadne 时,我在验证和验证用户登录时发现并发出了问题。通过 REST API,我可以使用 Flask-jwt-extended 库来处理用户身份验证。例如,我有一个更改用户名的功能。
@app.route("/change-username", methods=["POST"])
@jwt_required
def change_username():
...
return {"msg": "Username changed successfully"}, 200
此端点要求用户登录才能访问。然后我有另一个禁止用户
@app.route("/ban-user", methods=["POST"])
@jwt_required
def ban_user():
if current_user.role == "moderator":
...
return {"msg": "User has been banned"}, 200
else:
return {"msg": "You are not authorized to ban users"}, 401
这种方法之所以有效,是因为每个端点都可以单独设置为需要或不需要身份验证,但是使用 GraphQL 只使用一个端点,所以我要么必须公开所有数据,要么将所有数据放在身份验证墙后面,这是我不需要的真的很想要。
有没有办法单独设置每个查询以要求或不进行身份验证,我将如何以这种方式处理当前登录的用户?