Python Flask@login\u required在IE和Safari上不起作用

Python Flask@login\u required在IE和Safari上不起作用,python,internet-explorer,safari,flask,flask-login,Python,Internet Explorer,Safari,Flask,Flask Login,我正在尝试设置Flask登录,但在使用Internet Explorer和Safari时,无法使其正常工作 从登录页面登录后,这些浏览器上的用户将重定向回登录页面,并且日志显示该用户未登录 这在Firefox、Chrome和Opera上正常工作:用户被重定向到/top/页面 以下是我如何设置登录管理器和登录视图: login_manager = LoginManager(app) login_manager.login_view = "login" login_manager.login_me

我正在尝试设置Flask登录,但在使用Internet Explorer和Safari时,无法使其正常工作

从登录页面登录后,这些浏览器上的用户将重定向回登录页面,并且日志显示该用户未登录

这在Firefox、Chrome和Opera上正常工作:用户被重定向到/top/页面

以下是我如何设置登录管理器和登录视图:

login_manager = LoginManager(app)

login_manager.login_view = "login"
login_manager.login_message = u"Please log in to access this page."
#login_manager.refresh_view = "reauth"

#salt for hashing etc.
SALT = u""

# # Initialize extensions
# mail.init_app(app)
# db.init_app(app)
# login_manager.init_app(app)

@login_manager.user_loader
def load_user(user_id):
    """
   Loads user from Database
   """
    try:
        user = User.objects(id=user_id).first()
    except Exception as inst:
        app.logger.error("Could not login user %s: %s" % (type(inst), type))
        return None

    if user is None:
        app.logger.error("No user found for %s" % user_id)
        return None

    return AppUser(user)

@app.route('/login', methods=['GET', 'POST'])
def login():
    if current_user.is_authenticated():
        app.logger.info("already logged in")
        return redirect(request.args.get("next") or url_for('top'))

    if request.method == 'POST':
        e_mail = request.form['e_mail'].lower()
        password = request.form['password']
        app.logger.debug(password)
        app.logger.debug(e_mail)
        if e_mail is not None and password is not None:
            #get user from database
            try:
                start = time.time()
                users = User.objects(email=e_mail)
                user = users.first()
                end = time.time()

                app.logger.info("Getting user took %f.5 seconds." % (end - start))
            except Exception as inst:
                app.logger.error("Could not login user %s: %s" % (type(inst), type))
                raise abort(500)

            if user is None:
                app.logger.error("No user found for %s" % e_mail)
                flash('Username or password are not correct.', 'error')
            else:
                #check password
                m = hashlib.sha256()
                m.update(password.encode("UTF-8"))
                m.update(SALT.encode("UTF-8"))

                if m.hexdigest() == user.password:
                    app.logger.debug("Login %s" % e_mail)
                    login_user(AppUser(user))
                    app.logger.error("Args: %s" % request.args.get("next"))
                    return redirect(request.args.get("next") or url_for('top'))
                else:
                    flash('Username or password are not correct.', 'error')

    app.logger.error("not logged in")
    return render_template('login.html')

如何在所有浏览器中都能正常工作?

它只是一个会话名称。它包含一个空格,Safari和IE显然不支持该空格。

我在您的代码中没有看到限制访问的地方。我在找一个装饰师,上面写着“需要登录”。我也不确定您是否必须执行
AppUser(user)
,因为您似乎要使用类似SQLAlchemy的ORM从数据库中获取它。我不确定
raiseabort(500)
的语法是否有效。。。你有调试器吗?也许这就是它被抓获的地方,我已经解决了。它只是一个会话名称。它包含一个明显不受Safari和IE支持的空间。