Python Flask登录\u用户未设置\u已验证

Python Flask登录\u用户未设置\u已验证,python,flask,flask-login,Python,Flask,Flask Login,当使用Flask登录(第一次)并遵循我遇到的每个教程示例时,在正确发布凭据、调用Login_user()并重定向到受保护的Login_所需路径之后,我仍然收到401个未经授权的响应。只有当我明确地将is_Authorized属性设置为True时,它才能工作。但这似乎是不必要的,而且我找不到任何教程示例可以做到这一点。我忽略了什么?下面是示例代码。谢谢 从flask导入flask、呈现模板、url、jsonify、会话、重定向、请求 从flask_login导入LoginManager,需要登录,

当使用Flask登录(第一次)并遵循我遇到的每个教程示例时,在正确发布凭据、调用Login_user()并重定向到受保护的Login_所需路径之后,我仍然收到401个未经授权的响应。只有当我明确地将is_Authorized属性设置为True时,它才能工作。但这似乎是不必要的,而且我找不到任何教程示例可以做到这一点。我忽略了什么?下面是示例代码。谢谢

从flask导入flask、呈现模板、url、jsonify、会话、重定向、请求
从flask_login导入LoginManager,需要登录,登录用户,当前用户
login\u manager=LoginManager()
app=烧瓶(名称)
app.secret_key=b“u5#y2L”F4Q8z\n\xecgwefweligli]/'
登录管理器。初始化应用程序(应用程序)
类用户:
_用户={
“我”:“我的通行证”
}
_活动用户={}
定义初始化(自我,用户id):
self.user\u id=用户\u id
self.password=self.\u用户[用户id]
self.\u authenticated=False
自激活=真
@财产
def处于活动状态(自):
返回自激活状态
@财产
def已通过身份验证(自身):
返回自我
@_是经过身份验证的。setter
def已通过身份验证(自身、值):
如果值:
self.\u authenticated=True
其他:
self.\u authenticated=False
@财产
def是匿名的(自我):
返回错误
def get(用户id):
如果用户id在用户中。\u活动\u用户:
返回用户。\u活动用户[User\u id]
如果用户中有用户id。\u用户:
User.\u active\u users[User\u id]=用户(User\u id)
返回用户。\u活动用户[User\u id]
一无所获
def get_id(自身):
返回self.user\u id
@登录\u manager.user\u加载程序
def加载用户(用户id):
返回User.get(用户\u id)
@app.route('/login',methods=['GET','POST'])
def login():
如果request.method==“POST”:
u=User.get(request.form['username'])
app.logger.debug(u)
如果u和u.password==request.form['password']:
app.logger.debug('authenticated')
r=登录用户(u)
u、 _authenticated=True 35;这里:这不必要吗?
app.logger.debug(u.is_认证)
app.logger.debug(当前用户已通过身份验证)
返回重定向(url_for('index'))
返回重定向(url_用于('login'))
返回呈现模板('login.html')
@应用程序路径(“/”)
@需要登录
def index():
返回呈现模板('main.html')
当我删除:

u.is\u authenticated=True

用户未通过身份验证。我已查看了登录的源代码。\u user()设置似乎没有经过身份验证。我做得对吗?我只是感到困惑,因为没有任何文档/教程包含上述内容,但所有文档/教程都声称可以正常工作。

您需要显式设置的原始代码经过身份验证,因为从一个请求到下一个请求,每次都会创建一个新的用户对象实例,因此用户已通过身份验证的信息丢失

为了避免丢失此信息,我们需要一个存储位置。虽然Flask login提供了一个UserMixin类,该类提供了此信息的默认实现,但您可以在用户模型中添加authenticated字段:

authenticated = db.Column(db.Boolean, default=False)
当用户登录时,您应该将authenticated更改为true并将更改保存在数据库中;当用户注销时,您应该将authenticated更改为false并将更改保存在数据库中

is_authenticated函数类似于此:

@property
def is_authenticated(self):
    return self.authenticated

请找到这个。

为什么您不使用
flask\u登录中的
UserMixin
并在您的
User
课程中使用它?我很确定所有教程都会使用它,谢谢roganjosh-刚刚尝试过,它确实有效。仍然没有一个更明智的方法(查看了UserMixin的源代码)至于为什么我需要显式设置的原始代码是经过身份验证的。感谢您的帮助。通过坚持
is\u authenticated
,您将对用户进行一次身份验证,并在以后永远缩短身份验证,除非用户手动注销。这不是预期行为,也是应用程序中的一个危险安全漏洞de>is_authenticated
应在输入用户名和密码时动态设置。从一个请求到下一个请求,每次都会创建一个新的用户对象实例,因此用户已验证的信息将丢失“零件对于理解te用户和用户加载器功能非常有帮助。谢谢