Настройте аутентификацию / авторизацию с помощью 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/

Другие вопросы по тегам