- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在使用 Flask-Login 并试图了解它的工作原理。如果我对文档的理解正确,我应该创建一个包含四种方法的用户类,is_authenticated、is_active、is_anonymous 和 get_id。我真的不明白在那之后我应该做什么。有一个函数 login_user(user),据我所知,它会获取我尚未经过身份验证的用户的实例并对其进行身份验证,但是当我的用户类没有任何设置方法时,它如何工作?
这是一些代码:
class User:
isAuth = False
isActive = False
isAnon = True
id = unicode(0)
def __init__(self, isAuth, isActive, isAnon, id):
self.isAuth = isAuth
self.isActive = isActive
self.isAnon = isAnon
self.id = id
def is_authenticated(self):
return isAuth
def is_active(self):
return isActive
def is_anonymous(self):
return isAnon
def get_id(self):
return id
这是我对如何通过使用 authomatic 和 Flask-Login 验证用户身份的猜测:
@app.route('/login/<provider_name>/', methods=['GET', 'POST'])
def login(provider_name):
response = make_response()
result = authomatic.login(WerkzeugAdapter(request, response), provider_name)
user = User()
if result:
if result.user:
result.user.update()
login_user(user)
return render_template('login.html', result=result)
return response
我错过了什么?
编辑,这里是 user_loader:
@lm.user_loader
def load_user(userid):
return User.get(userid)
我也把这个放在最上面:
lm = LoginManager()
lm.init_app(app)
最佳答案
当定义用户模型时,您必须实现这四个方法(这就是 Flask-Login 的工作方式)。但是,您不必自己定义它们,除非您需要一些自定义行为。 Flask-Login 为您提供了 UserMixin 类。您所要做的就是将您的用户模型子类化,UserMixin 将为您提供所有四种具有默认行为的方法。例如:
from flask.ext.login import UserMixin
class User(UserMixin, Model):
# your user model definition
在您的用户模型中,您可以覆盖这四种方法中的任何一种以满足您的需要。另外,请参阅“您的用户类别”部分的底部以供进一步引用: https://flask-login.readthedocs.org/en/latest/#your-user-class
要获取用户数据,您应该使用表单。按照你的说法,用户必须将他/她的数据直接输入到 URL 中(我猜是 /login?username=yourusername&password=youruserpassword),这是不安全的,通常是被认为是一种不好的做法。
相反,您应该使用表单让您的用户输入他们的登录数据。WTForms 和 Flask-WTF 扩展为您提供了轻松创建表单的方法。例如:
from flask_wtf import Form
from wtforms import StringField, PasswordField, SubmitField
from wtforms.validators import Required
class LoginForm(Form):
username = StringField('Your username', validators=[Required()])
password = PasswordField('Your password', validators=[Required()])
submit = SubmitField('Sign In')
进一步引用: https://wtforms.readthedocs.org/en/latest/和 https://flask-wtf.readthedocs.org/en/latest/
之后,您的 View 应该只捕获表单数据,检查数据库中是否存在提供数据的用户,以及提供的密码是否与数据库中存储的密码匹配。这就是您想要的 View :
@app.route('/login', methods=['GET', 'POST'])
def login():
form = LoginForm()
# on POST check if the submitted form is valid
if form.validate_on_submit():
# get user from database
user = User.query.filter_by(username=form.username.data).first()
#check if the user exists and if he/she provided correct password
if user is not None and user.password == form.password.data:
# if everything checks out, call the login function
login(user)
# redirecting after form submission is also considered good practice
redirect(url_for('somewhere'))
# if user is not found or he/she provided wrong password, inform them
flash('Invalid username and/or password')
# on GET, just render the template with login form
return render_template('login.html', form=form)
作为旁注,此 View 假设您以纯文本形式存储密码,正如有人指出的那样,这是一个坏主意。我这样做只是为了演示登录功能。
此外,如果您想知道如何定义模型以及如何从数据库中查询数据,请参阅 Flask-SQLAlchemy https://pythonhosted.org/Flask-SQLAlchemy/和 SQLAlchemy http://www.sqlalchemy.org/
关于python - 我如何使用 Flask-Login?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25653318/
嗨,我试图在亚马逊服务托管的计算机上远程登录。这是ubuntu 64位机器。 一开始,我能够使用客户端、远程桌面连接 (RDP) 登录计算机,并保持默认端口 (-1),而对于命令行,我使用 putty
我已将 Jenkins 设置为使用 Unix 用户/组数据库安全性,但除了运行 Jenkins 服务的用户之外,我无法使用我创建的任何用户登录。通过 ssh 或 su 登录服务器可以工作,但是当我尝试
我想通过 power shell 使用以下命令在 azure 中创建一个新的资源组: New-AzureRmResourceGroup - Name name -Location "WesternEu
我已经部署了由 spring boot 应用程序使用 oauth2 生成的 war 文件,以便使用 Azure 应用服务进行单点登录(仅限 https)。 当我浏览主页时,主页会加载一个登录按钮。单击
我已经部署了由 spring boot 应用程序使用 oauth2 生成的 war 文件,以便使用 Azure 应用服务进行单点登录(仅限 https)。 当我浏览主页时,主页会加载一个登录按钮。单击
我尝试按照一些 django 教程来创建登录名,但我一直在获取 ImportError at /login No module named login 我的文件结构是: -src -log
在我的 Spring 项目中,我将注销目标 url 设置为“/login?logout”以显示登录页面并显示消息“您现在已注销”。 在 Spring Security 配置中,我这样做了: @Over
我目前正在尝试为我在带有 Ubuntu 的虚拟机上运行的实际本地网页创建一个简单的登录页面。 我创建了 LoginPage.html在位置 /var/www/html . 然后 HTML 文件调用 l
我有两个安全区域,我为其提供基于表单的登录。 /用户 /admin 以下按预期工作: 访问 protected 资源时重定向到登录页面 当凭据为假时使用 ?error 参数重定向到登录页面 根据定义的
我有一个脚本,我通常用来同步AG登录。但是,我需要使用SQL凭据和密码将其实现为自动运行。有人知道我如何调整下面的脚本以使用SQL登录和密码吗?
更新 下面的 Flask 重定向(响应代码 302)似乎作为对 _dash-update-component 的响应传递。要求: b'\nRedirecting...\nRedirecting...\
这是我第一次使用 Django 登录模板,但遇到了问题。它一直说 login 不是一个有效的 View 函数,但我在我的用户应用程序的 urls.py 中定义了它: 不知道我做错了什么。 主 urls
我不是专业程序员,所以请原谅任何愚蠢的错误——我正在做一些研究,我正在尝试使用 Selenium 登录数据库以搜索大约 1000 个术语。 我有两个问题:1. 重定向到组织登录页面后如何使用 Sele
我正在使用 flutter,我想在我的应用程序中实现使用 Instagram 登录。所以我关注这个tutorial用于 Instagram 登录, 我成功登录但未获取用户详细信息,它正在打开重定向 U
每当我以访客身份重定向时,我都会收到错误消息: Missing required parameters for [Route: login] [URI: {locale}/login]. 但是当我登录
我已开始使用 Azure Pipelines 和 GitHub 支持的帐户并创建了我的第一个组织。我在该组织中没有任何项目。我在 portal.azure.com 上也没有任何订阅。我想使用 Azur
它给出错误:找不到“登录”的反向。 “登录”不是有效的 View 函数或模式名称。 网址.py urlpatterns = [ path('admin/', admin.site.urls),
关闭。这个问题是opinion-based .它目前不接受答案。 想改善这个问题吗?更新问题,以便可以通过 editing this post 用事实和引文回答问题. 2年前关闭。 Improve t
我需要一个自定义的 Facebook 登录按钮。 fb:login-button 的 medium、large 等解决方案不是我需要的。我知道 FB TOS。我的按钮将非常相似。 如何将我的按钮转换为
Spring 版: 2.5.6 SEC01 Spring 安全版本: 3.0.0 RC1 我正在尝试将 Spring Security 与 Spring MVC 应用程序集成。安全部分主要基于 Spr
我是一名优秀的程序员,十分优秀!