title: How to POST the refresh token to Flask JWT Extended?
body: <p>I am trying to refresh a JWT token from the code here.  The issue is with how to get the new token with the refresh.</p>
  
  <p>This works:</p>
  
  <pre><code>curl http://127.0.0.1:5000/protected
  {"msg":"Missing Authorization Header"}
  </code></pre>
  
  <p>This works and I get my token and put it in ACCESS</p>
  
  <pre><code>curl -H "Content-Type: application/json" -X POST   -d '{"username":"test","password":"test"}' http://localhost:5000/login
  </code></pre>
  
  <p>This works and I get my username</p>
  
  <pre><code>curl -H "Authorization: Bearer $ACCESS" http://localhost:5000/protected
  </code></pre>
  
  <p>But when the token expires, how do I get curl with my refresh token and/or access token to get my new access token?  I've tried numerous POST's and nothing seems to work:</p>
  
  <p><a href="https://flask-jwt-extended.readthedocs.io/en/latest/refresh_tokens.html" rel="noreferrer">https://flask-jwt-extended.readthedocs.io/en/latest/refresh_tokens.html</a></p>
  
  <pre><code>from flask import Flask, jsonify, request
  from flask_jwt_extended import (
      JWTManager, jwt_required, create_access_token,
      jwt_refresh_token_required, create_refresh_token,
      get_jwt_identity
  )
  
  app = Flask(__name__)
  
  app.config['JWT_SECRET_KEY'] = 'super-secret'  # Change this!
  jwt = JWTManager(app)
  
  
  @app.route('/login', methods=['POST'])
  def login():
      username = request.json.get('username', None)
      password = request.json.get('password', None)
      if username != 'test' or password != 'test':
          return jsonify({"msg": "Bad username or password"}), 401
  
      # Use create_access_token() and create_refresh_token() to create our
      # access and refresh tokens
      ret = {
          'access_token': create_access_token(identity=username),
          'refresh_token': create_refresh_token(identity=username)
      }
      return jsonify(ret), 200
  
  
  # The jwt_refresh_token_required decorator insures a valid refresh
  # token is present in the request before calling this endpoint. We
  # can use the get_jwt_identity() function to get the identity of
  # the refresh token, and use the create_access_token() function again
  # to make a new access token for this identity.
  @app.route('/refresh', methods=['POST'])
  @jwt_refresh_token_required
  def refresh():
      current_user = get_jwt_identity()
      ret = {
          'access_token': create_access_token(identity=current_user)
      }
      return jsonify(ret), 200
  
  
  @app.route('/protected', methods=['GET'])
  @jwt_required
  def protected():
      username = get_jwt_identity()
      return jsonify(logged_in_as=username), 200
  
  
  if __name__ == '__main__':
      app.run()
  </code></pre>