Ariadne GraphQL文档信息缺失疑问:突变章节auth变量无对应说明
关于Ariadne文档中
auth变量的说明 Ariadne官方文档示例中的auth是演示用的占位对象,不属于框架内置API,你可以根据自身项目的身份认证逻辑自行实现,以下是适配Flask场景的常用实现方案:
核心方法对应逻辑
auth对象需要的三个方法可按照你的认证方案实现,常用的Cookie会话场景逻辑如下:
authenticate:校验登录请求传入的账号密码有效性,通常为查询用户表比对密码哈希,匹配则返回对应用户对象,不匹配返回Nonelogin:将登录成功的用户信息写入当前会话,Flask场景下直接操作flask.session存储用户ID即可logout:清空当前会话中的用户身份信息,删除session中存储的用户ID字段即可
示例实现代码
from flask import session from your_app.models import User from werkzeug.security import check_password_hash class Auth: def authenticate(self, username: str, password: str): # 校验账号密码有效性 user = User.query.filter_by(username=username).first() if user and check_password_hash(user.password_hash, password): return user return None def login(self, user): # 写入用户身份到会话 session["user_id"] = user.id # 按需配置会话永久有效 session.permanent = True def logout(self): # 清空会话中的用户身份 session.pop("user_id", None) # 初始化实例后即可在resolver中使用 auth = Auth()
JWT认证场景适配
如果你的项目使用JWT而非Cookie会话,可对应调整方法逻辑:
authenticate逻辑不变,仍为校验账号密码有效性login方法修改为生成JWT令牌并返回给客户端logout方法可在客户端直接删除令牌,服务端需要主动失效的话可维护令牌黑名单
你可以完全根据自身项目的认证方案调整该对象的实现,只要保留resolver中用到的方法调用逻辑即可,无需严格对齐文档示例。
内容的提问来源于stack exchange,提问作者beginner_dev
相关产品推荐
相关产品推荐

