我正在尝试使用 flask_JWT_extended + ariadne(graphql) 为我的 react(nextjs) 应用程序创建一个身份验证系统。我已成功设置登录突变以检索访问和刷新令牌,但我不知道如何将它们正确集成到我的应用程序中。我知道访问令牌用于发出后续请求,刷新令牌用于保持令牌新鲜度,但我不知道如何使用此堆栈实现它。
突变.py
这是我的登录突变,它返回 access_token 和 refresh_token。它工作正常。
@mutation.field("login")
@convert_kwargs_to_snake_case
def resolve_login(_, info, username, password):
user = User.query.filter_by(username=username).first()
if user and user.check_password(password):
access_token = create_access_token(identity=username)
refresh_token = create_refresh_token(identity=username)
payload = {
"user": user,
"access_token": access_token,
"refresh_token": refresh_token,
}
return payload
核心.py
这是我的 JWT 配置,根据我在网上收集的内容,我应该检查每个 api 请求上的令牌以保持其新鲜度,但我不知道如何做到这一点,尤其是使用 python + ariadne。这是与使用 nodejs 实现它的人的链接:https ://github.com/benawad/graphql-express-template/blob/22_advanced_jwt_auth/auth.js
app = Flask(__name__)
app.config["SQLALCHEMY_DATABASE_URI"] = "postgresql://localhost/pinkle"
app.config["JWT_SECRET_KEY"] = "this_is_a_secret"
app.config["SQLALCHEMY_TRACK_MODIFICATIONS"] = False
JWTManager(app)
index.js
这是我的前端调用登录用户,它返回令牌,但我不知道在哪里使用令牌,或者我是否应该将其保存在客户端状态并使用令牌进行调用。
function login({ username, password }) {
axios
.post('http://localhost:5000/graphql', {
query: `mutation {
login(username: "${username}", password: "${password}") {
user {
id
username
password
}
}
}`,
})
.then(result => {
console.log(result.data)
})
}