Python 如何在Flask登录中对调用进行身份验证
我正在对以下用户类使用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
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这就是我想说的,但是始终使用最新版本的软件可以防止一些错误。通常,这些错误很难调试:)