最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

python - jwt-extended and post form issue - Stack Overflow

programmeradmin3浏览0评论

I have a flask app with jwt_extended config as auth. For all pages, it works without any issue. But for pages with a form and post methods, when I submit the form, the app redirect me to the login page in loop ( even if I log or already loggued ).

If I put : JWT_COOKIE_CSRF_PROTECT = False I don't have any issue

search/search.html

{% extends "base.html" %}

{% block content %}

<nav class="uploadbar">
    <form id="form-navbar" method="POST" action="/search/" class="form-inline formupload" enctype="multipart/form-data">
        <input id="host-navbar-upload" class="form-control mr-sm-2" name="hostname-list" type="file" accept=".csv" placeholder="Upload a csv file..." aria-label="Upload">
        <button id="upload-navbar" class="btn btn-primary my-2 my-sm-0 button-form-upload" type="submit">Upload</button>
    </form>
  </nav>

 {% endblock %}

auth/routes.py

from app.auth import bp
from flask import current_app

from app.extensions import ldap

from flask import (
    g, 
    render_template, 
    request, 
    session, 
    redirect, 
    url_for, 
    jsonify, 
    make_response,
    flash
)

from flask_jwt_extended import (
    create_access_token, 
    create_refresh_token, 
    set_access_cookies, 
    set_refresh_cookies, 
    unset_jwt_cookies, 
    get_jwt_identity
)

from flask_jwt_extended import jwt_required

@bp.route('/')
@jwt_required()
def index():
    return jsonify('Login Successfull')

@bp.route("/login/", methods=["GET","POST"])
def login():
    if g.user:
        return redirect(url_for("dashboard.dashboard"))
    
    if request.method == "POST":
        user = request.form["username"]
        passwd = request.form["password"]
        test = ldap.bind_user(user, passwd)
    
        if test is None or passwd == "":
            flash('Invalid username or password. Please try again.', 'danger') 
            current_app.logger.info('Invalid password for user : %s', user)
      
        else:
            access_token = create_access_token(identity=user)
            refresh_token = create_refresh_token(identity=user)
            response = make_response(redirect(url_for('dashboard.dashboard')))
            set_access_cookies(response, access_token)
            set_refresh_cookies(response, refresh_token)
            
            return response

    return render_template('auth/login.html',title='Login')

@bp.route("/token/refresh", methods=["POST"])
@jwt_required(refresh=True)
def refresh():
    identity = get_jwt_identity()
    access_token = create_access_token(identity=identity)

    return jsonify(access_token=access_token)

@bp.route("/logout/")
@jwt_required()
def logout():
    response = make_response(redirect(url_for("auth.login")))
    unset_jwt_cookies(response)

    return response

search/routes.py

from app.search import bp
from flask import render_template
from flask import request
from app.extensions import db, ldap
from flask import current_app as app
from flask_jwt_extended import jwt_required
import pandas as pd
from app.utils import df_parser

@bp.route('/', methods=["GET", "POST"])
@jwt_required()
def search():
    
    host = 'vautour2'

    if request.method == "POST":
        df = pd.read_csv(request.files.get('hostname-list'))
        df = df_parser(df)
        hostlist = df['name'].tolist()

        print(hostlist)
            
    return render_template('search/search.html',title='Search',
        host=host,
    )

@bp.route('/result/', methods=["GET", "POST"])
@jwt_required()
def result():

    if request.method == "POST":
        host = request.form["hostname"]
    
    return render_template('search/result.html',title='Search result',
        host=host,
    )

Any idea ?

发布评论

评论列表(0)

  1. 暂无评论