Skip to main content
Join the official 2019 Python Developers SurveyStart the survey!

Flask JWT Router is a Python library that adds authorised routes to a Flask app

Project description

PyPI version Build Status

Greenprint

Flask JWT Router

Flask JWT Router is a Python library that adds authorised routes to a Flask app.

Read the Documentation here: Flask-JWT-Router

Installation

pip install flask-jwt-router

Basic Usage

from flask import Flask
from flask_jwt_router import JwtRoutes

app = Flask(__name__)

JwtRoutes(app)

# If you're using the Flask factory pattern:
jwt_routes = JwtRoutes(entity_model=UserModel)  # Example with *entity_model - see below

def create_app(config):
   ...
   jwt_routes.init_app(app)

White list Routes

app.config["WHITE_LIST_ROUTES"] = [
    ("POST", "/register"),
]

@app.route("/register", methods=["POST"])
def register():
    return "I don't need authorizing!"

Prefix your api name to whitelisted routes

    # All routes will
app.config["JWT_ROUTER_API_NAME"] = "/api/v1"
app.config["WHITE_LIST_ROUTES"] = [
    ("POST", "/register"),
]

@app.route("/api/v1/register", methods=["POST"])
def register():
    return "I don't need authorizing!"
   

Allow roots to bypass Flask-JWT-Router completely

    # Define homepage template routes for example on JWT_IGNORE_ROUTES 
    # & still get to use the api name on request handle returning resources
    app.config["IGNORED_ROUTES"] = [
        ("GET", "/")
    ]

Declare an entity model

# Create your entity model (example uses Flask-SqlAlchemy)
class UserModel(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String)
# You can define the primary key name with `ENTITY_KEY` on Flask's config
app.config["ENTITY_KEY"] = "user_id"
# (`id` is used by default)
JwtRoutes(app, entity_model=UserModel)

Authorization

from flask_jwt_router import RouteHelpers
rh = RouteHelpers(app)

# white list the routes
app.config["WHITE_LIST_ROUTES"] = [
    ("POST", "/register"),
    ("POST", "/login"),
]

@app.route("/register", methods=["POST"])
def register():
    """I'm registering a new user & returning a token!"""
    return jsonify({
        "token": rh.register_entity(entity_id=1)
    })

@app.route("/login", methods=["POST"])
def login():
    """I'm authorized & updating my token!"""
    return jsonify({
        "token": rh.update_entity(entity_id=1)
    })

Access entity on Flask's global context

# Example uses Marshmallow to serialize entity object
class EntitySchema(Schema):
    id = fields.Integer()
    name = fields.String()

@app.route("/user", methods=["GET"])
def get_user():
    """I was authorized & i have a user!"""
    entity = EntitySchema().dumps(g.entity).data
    return jsonify({
        "entity": entity
    })

Authors

Contributing

Pull requests are welcome. For major changes, please open an issue first to discuss what you would like to change.

Please make sure to update tests as appropriate.

To run tests use:

 pipnv install -e .
 pipenv shell

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Files for flask-jwt-router, version 0.0.14
Filename, size File type Python version Upload date Hashes
Filename, size flask-jwt-router-0.0.14.tar.gz (28.1 kB) File type Source Python version None Upload date Hashes View hashes

Supported by

Elastic Elastic Search Pingdom Pingdom Monitoring Google Google BigQuery Sentry Sentry Error logging AWS AWS Cloud computing DataDog DataDog Monitoring Fastly Fastly CDN SignalFx SignalFx Supporter DigiCert DigiCert EV certificate StatusPage StatusPage Status page