Python 如何在Flask登录中对调用进行身份验证

Python 如何在Flask登录中对调用进行身份验证,python,flask,flask-login,Python,Flask,Flask Login,我正在对以下用户类使用flask登录。起初我没有重写is\u authenticated()方法,但我认为它可能会解决我的问题(它没有) 我在3台不同的计算机上运行了我的代码。其中一个我必须调用is_authenticated()方法作为常规方法(使用()),另两个我必须使用is_authenticated作为布尔值(不使用()) 在所有计算机中,解释器都设置为python2.7。 我错过了什么 class User(UserMixin): """ Defines each us

我正在对以下用户类使用flask登录。起初我没有重写
is\u authenticated()
方法,但我认为它可能会解决我的问题(它没有)

我在3台不同的计算机上运行了我的代码。其中一个我必须调用
is_authenticated()
方法作为常规方法(使用
()
),另两个我必须使用is_authenticated作为布尔值(不使用
()

在所有计算机中,解释器都设置为python2.7。
我错过了什么

class User(UserMixin):
    """
    Defines each user.
    """
    def __init__(self, user, pwd):
        self.username = user
        self.password = pwd

    def get_id(self):
        return self.username

    def is_authenticated(self):
        return True
下面是我调用的方法:

@app.before_request
def before_request():
    g.user = flask.ext.login.current_user
    g.username = g.user.get_id()


@app.route('/', methods=['GET', 'POST'])
@flask.ext.login.login_required
def index():
    if g.user is None or not g.user.is_authenticated(): // or g.user.is_authenticated
        return redirect('login')
    return render_template('main.html', user=g.username)

像这样?检查它是布尔值还是函数:

if type(is_authenticated) == type(True): # if it's a boolean, this is True.
    # Your code

else: # if not, it's a function.
    is_authenticated()
    # Your code
在这里创建一个函数是这样一个好主意:

def function_name():
    if type(is_authenticated) == type(True):
        return is_authenticated
    else:
        return is_authenticated()

您如何检查
是否经过身份验证?您应该从flask.ext.login导入当前用户
,然后执行
if current\u user.is\u authenticated():
检查请求它的当前用户是否经过身份验证这就是我正在做的,但正如我说的,有时我需要这样调用“if current\u user.is\u authenticated()”,有时类似于布尔值“if current_user.is_authenticated”你能显示你调用同一个用户的代码吗?我编辑了这个问题,我想你最好使用
current_user
current_user.is_authenticated()
g.user用于将a变量设置为全局变量,这样就可以在当前用户是对象的任何范围内访问它。这告诉我们当前活动用户,我们使用g.user将当前用户对象设置为全局对象,这样就可以在任何地方使用它。实际上,这是一个很好的解决方法。我仍然想知道为什么它在不同的系统上工作方式不同。我不知道,也许你需要更新<代码>烧瓶登录< /代码>?就是这样。我只是检查了版本,它是不一样的。防止不必要的行为的最好方法是按照你的建议来检查它是什么类型。谢谢!“OntheDeV凯文的解决方案是好的,但是我还是建议你考虑版本是相同的,并且尝试用正确的A解决这个问题。ttempt:)@Nagarajtanri这就是我想说的,但是始终使用最新版本的软件可以防止一些错误。通常,这些错误很难调试:)