0

I am using flask_jwt_extended for jwt authentication in my flask web application. After the user enters email and password, I make a token using create_access_token and then redirect to another link which can only be accessed with @jwt_required.

app.py file. Notice if the way of importing jwt from user.py file like this is correct.

from flask import Flask
from flask_restful import Api
from resources.organization import OrganizationResourceList, OrganizationResource
from resources.user import LoginResource, user_list, User, jwt


app = Flask(__name__)
app.config['SECRET_KEY'] = '_rV;He_7Bz8TVvA'
app.config['JWT_TOKEN_LOCATION'] = ['headers']
jwt.init_app(app)
api = Api(app)


user_list.append(User(name="Admin User", email="admin@test.com", password="12345", photo="", user_type="host"))


# Authorization

api.add_resource(LoginResource, '/login')

# Organization
api.add_resource(OrganizationResourceList, '/organizations')

if __name__ == '__main__':
    app.run(port=5000, debug=True)

user.py file containing LoginResource This is where I am creating token.

from flask import request, Response, render_template, redirect
from flask_restful import Resource
from models.user import User, user_list
from passlib.hash import sha256_crypt
from flask_jwt_extended import create_access_token, create_refresh_token, JWTManager


jwt = JWTManager()

class LoginResource(Resource):
    def post(self):
        req = request.form
        email = req.get("email")
        user = [x for x in user_list if x.email == email]
        if user:
            user = user[0]
            password = sha256_crypt.verify(req.get("password"), user.password)
            if user and password:
                access_token = create_access_token(identity=user.id)
                refresh_token = create_refresh_token(user.id)
                redir = redirect('/organizations')
                redir.headers['Authorization'] = "Bearer %s" % access_token
                return redir
        return redirect("/login")

Interestingly, when I debug the app, I see the headers of redirect as shown.

enter image description here

organization.py file containing OrganizationResourceList class

from flask import request, Response, render_template
from flask_restful import Resource
from models.organization import Organization, organization_list
from flask_jwt_extended import jwt_required, get_jwt_identity


class OrganizationResourceList(Resource):
    @jwt_required()
    def get(self):
        current_user = get_jwt_identity()
        sample_org = Organization(
            name='Bin Yousef',
            description='My main working company in Qatar',
            photo=''
        )
        data = []
        for organization in organization_list:
            data.append(organization.data)
        return Response(response=render_template('organization/index.html', organizations=data))

After hours of searching, I am still not able to get rid of the error :( Please help

za_ali33
  • 366
  • 2
  • 9

0 Answers0