Skip to content

Flask

Integration with Flask is done in the form of extension classes, which are recommended in the official documentation.

Jam Extension

This is a simple extension that does not check tokens/sessions like JWTExtension and SessionExtension. It is needed for easy access to jam inside routes, via current_app.extensions[“jam”]:

Tip

For more convenient operation, it is recommended to use JamExtension in conjunction with another extension, for example JamExtension + JWTExtension.

from flask import current_app

@app.route("/login")
def login(some_param, some_param2):
    jam = current_app.extensions["jam"]
    # some logic
    token = jam.gen_jwt_token(payload)

Example of integration with your Flask application:

from flask import Flask

from jam import Jam
from jam.ext.flask import JamExtension

jam = Jam()

def create_app() -> Flask:
    app = Flask(__name__)
    jam_ext = JamExtension(jam)
    jam_ext.init_app(app)
    return app


JWT Extension

This extension checks tokens from the header or cookie and writes the payload to the route context.

Setup extension

jam: Jam

Jam instance.

app: Flask | None = None

Flask app instance.

The cookie name for the access token. If passed, Extension will read the token from it. If None is passed, Extension will read the header.

header_name: str | None

The name of the header for the access token. If passed, Extension will read the token from the header. If None is passed, Extension will read the cookie.

Tip

JWTExtension expects the header to be in the format: Bearer <token>

from flask import Flask

from jam import Jam
from jam.ext.flask import JWTExtension


app = Flask(__name__)
jam = Jam()
jwt_ext = JWTExtension(jam, header_name="Authorization", cookie_name=None)
jwt_ext.init_app(app)

Usage example

from flask import Flask, g, request, Response, abort

from jam import Jam
from jam.ext.flask import JWTExtension

app = Flask(__name__)
jam = Jam()
jwt_ext = JWTExtension(jam, header_name='Authorization', cookie_name=None)
jwt_ext.init_app(app)


@app.route("/login")
def login(username, password) -> Response:
    # some logic
    payload = jam.make_payload(**{"user": 1})
    token = jam.gen_jwt_token(payload)
    response = Response(token)
    return response


@app.route("/get_user")
def get_user() -> Response:
    payload = g.payload
    if not payload:
        abort(403)
    response = Response(payload)
    return response

Session Extension

This extension checks sessions ids from the header or cookie and writes the payload to the route context.

Setup extension

jam: Jam

Jam instance.

app: Flask | None = None

Flask app instance.

The cookie name for the session id. If passed, Extension will read the session id from it. If None is passed, Extension will read the header.

header_name: str | None

The name of the header for the session id. If passed, Extension will read the session id from the header. If None is passed, Extension will read the cookie.

Tip

SessionExtension expects the header to be in the format: Bearer <token>

from flask import Flask

from jam import Jam
from jam.ext.flask import SessionExtension


app = Flask(__name__)
jam = Jam()
session_ext = SessionExtension(jam, header_name=None, cookie_name="sessionId")
session_ext.init_app(app)

Usage example

from flask import Flask, g, request, Response, abort

from jam import Jam
from jam.ext.flask import SessionExtension

app = Flask(__name__)
jam = Jam()
session_ext = SessionExtension(jam, header_name=None, cookie_name="sessionId")
session_ext.init_app(app)


@app.route("/login")
def login(username, password) -> Response:
    # some logic
    session_id = jam.create_session("usern", {"user": 1})
    response = Response(session_id)
    response.set_cookie("sessionId", session_id)
    return response


@app.route("/get_user")
def get_user() -> Response:
    payload = g.payload
    if not payload:
        abort(403)
    response = Response(payload)
    return response