Настройте аутентификацию / авторизацию с помощью flask-jwt-extended + ariadne (graphql) + react
Я пытаюсь создать систему аутентификации для моего приложения response (nextjs) с flask_JWT_extended + ariadne (graphql). Я успешно настроил мутацию входа в систему, которая извлекает токены доступа и обновления, но я не знаю, как правильно интегрировать их в свое приложение. Я знаю, что токен доступа используется для последующих запросов, а токен обновления используется для поддержания актуальности токена, но я не знаю, как реализовать его с помощью этого стека.
mutations.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
core.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)
})
}
1 ответ
Документация Flask-JWT-Extended включает примеры использования JWT из JavaScript, которые могут быть вам полезны: https://flask-jwt-extended.readthedocs.io/en/stable/token_locations/