问题标签 [flask-security]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - 移动端 Flask API 的用户认证
我正在 Flask 中制作一个 API,用于打包和下载一个简单的 jQuery mobile + PhoneGap 应用程序。据我了解,对数据库的所有调用都应使用 JavaScript、AJAX 和 JSON 进行。由于该应用程序是关于用户的,并且所有视图都从登录的用户那里获取数据,所以我不确定如何进行身份验证。据我了解,工作流程应该是:
- 用户登录(json 编码的用户名和密码)
- 服务器为该用户生成具有到期时间(即 24 小时)的令牌
- 此令牌作为 cookie 保存在移动应用程序或本地存储中
- 所有对服务器的调用都是使用这个标识当前用户的令牌完成的:
/api/token=12345
- 当令牌过期时,需要新的登录提示
我想用Flask-Security 的 authentication token来实现这个。有没有更直接的方法来实现这一点?
python - 通过用户名而不是电子邮件登录烧瓶安全性
我想在User
模型中有字段,用户通过它登录username
而不是email
我定义:
app.config['SECURITY_USER_IDENTITY_ATTRIBUTES'] = 'username'
但我仍然得到:
似乎电子邮件被硬编码到烧瓶安全中......
我可以改变它吗?
编辑:用户模型(根据评论中的要求):
flask - 如何自定义 flask.ext.security.forms.LoginForm 以提示和使用用户名而不是电子邮件?
如何自定义 flask.ext.security.forms.LoginForm 以提示和使用用户名而不是电子邮件?
我试过这个,
换了模板,
更改了用户db以使用名称而不是电子邮件
但是烧瓶安全仍然尝试在数据存储区而不是用户中查找电子邮件。
python - Flask-Security user_registered 信号在 Python 3.3 中未收到,但在 2.7 中有效
我正在尝试使用 user_registered 信号,以便在用户使用 Flask-security 注册时为用户设置默认角色,如下链接所示:在 Flask Security 中设置默认角色
在我的搜索中,我可以看到烧瓶安全中已经解决了一个错误:没有从烧瓶安全获得信号,修复 - 用户注册的信号问题
我尝试了以下方法来证明处理程序是否收到了信号,但没有任何运气:
但是,即使用户已注册并且应该发送信号,它也永远不会被调用。
如果有帮助,我将烧瓶安全配置设置如下:
来自 Flask-Login 和 Flask-Principal 的信号对我有用,因为我设法确认以下代码片段在发送信号时成功打印:
对于我的设置,我使用 python 3.3 (anaconda) 并使用以下内容:Flask==0.10.1,flask-login==0.2.11,flask-principal==0.4.0,flask-security==1.7.4,闪光灯== 1.3。查看了烧瓶登录和烧瓶安全中的信号后,我不确定为什么烧瓶安全信号不起作用。
编辑:
如果我print(user_registered.receivers)
在我的应用程序中添加路由,它将显示我有一个接收器:{139923381372400: <function user_registered_sighandler at 0x7f42737145f0>}
。如果我将相同的打印语句放在 flask-security 的 registerable.py 之前,user_registered.send(app._get_current_object(),user=user, confirm_token=token)
那么它不会列出任何接收者:{}
编辑2:
问题似乎与使用 python 3.3 有关。我创建了一个 python 2.7 环境,并且 user_registered 代码按预期工作。
完整的代码重现:
base.html 模板:
security - 如何使用烧瓶安全保护烧瓶管理面板
我希望保护使用 Flask 制作的 Web API 并与之集成flask-admin
以提供管理界面。我搜索并发现 flask-admin 有一个管理面板,/admin
默认情况下任何人都可以访问它。它不提供身份验证系统并且完全开放(没有任何安全性),因为他们没有假设将使用什么来提供安全性。这个 API 必须在生产中使用,所以我们不能/admin
为每个点击 url 的人提供开放的路线。需要适当的身份验证。
在views.py
我不能简单地放置/admin
路由并通过装饰器提供身份验证,因为这将覆盖已经创建的现有路由flask-admin
,从而导致错误。
进一步的研究表明,有两个模块flask-admin
和flask-security
. 我知道flask-admin
有is_accessible
保护它的方法,但它没有提供flask-security
.
我还没有找到任何方法来保护端点/admin
以及所有其他/admin
以/admin/<something>
.
我正在寻找专门用烧瓶安全性来完成这项任务。如果不可能,请提出替代方案。
PS:我知道我可以锁定ngnix
自己,但那将是最后的选择。如果我可以通过它拥有一个身份验证系统flask-security
会很好。
python - 管理员(仅限)用户注册,Flask-Security
我目前正在使用 Flask-Security(包括 Flask-WTForms、Flask-SQLalchemy 和 Flask-Login)为 web 应用程序构建登录。我已经能够相当轻松地设置我的大部分登录流程,包括忘记密码;但是我想这样做,以便用户注册的唯一方法是通过只有管理员可以访问的页面。我设法配置了角色(管理员、用户)并设置了以下视图:
这将创建成功限制为具有管理员角色的帐户的门户。但是,我不确定如何在这里进行,因为 Flask-security 没有内置的方法来启用我正在尝试做的事情。
我已经覆盖了 RegisterForm 以通过正则表达式强制执行密码规则:
基本上我想要一个位于 /adminregister 的表单,当管理员访问该表单时,它允许输入电子邮件地址,此时首先在数据库中使用随机且安全的密码创建用户,然后执行类似的过程发生忘记密码并创建 1 次密码代码以重置密码。
我看过的有用的东西:
在 flask-security/views.py 中有忘记的密码代码:
/li>在 flask_security/registerable.py 中有 register_user 的代码
/li>
我想以某种方式将这两者结合起来,以便在“/adminregister”中提交具有唯一字段“电子邮件”的表单后,电子邮件会在数据库中添加一个安全的随机密码,并且电子邮件地址会发送一封电子邮件,其中包含链接以更改密码(最好是一条消息解释)。我什至不确定我会在哪里添加这样的代码,因为没有什么可以专门覆盖,特别是因为我找不到覆盖 RegisterForm 以拥有更少的字段和相同的功能的方法。
我的代码结构与 flask-security 文档的quickstart 一致。
提前感谢您提供的任何指导。
python - AttributeError:类型对象“用户”没有属性“查询”
我有一个用 sqlalchemy 构建和填充的大型数据库(原始的 - 不是 flask-SQLAlachemy)。我想在网站上添加烧瓶安全性,我意识到它依赖于烧瓶-SQLAlchemy(而不是原来的),但我的理解是烧瓶-SQLAlchemy 可以使用(刚开始尝试了解更多关于它的信息)原本的。将用户输入数据库似乎可行。当我导航到受限页面时,它会提示我登录(应该如此)。输入正确的电子邮件地址和密码时,我收到错误AttributeError: type object 'User' has no attribute 'query'
消息,并且由于错误的回溯没有引用我的任何代码,我不知道如何解决它。
认为这可能是 sqlalchemy 到 flask-SQLAlchemy 的转换问题,我觉得除了创建新数据库之外我已经尝试了所有方法。我在 flask-security 或 flask-SQLAlchemy 文档中没有找到任何可以帮助解决此问题的内容。任何人都知道如何解决这个问题?
这是我的代码:
测试.py
数据库设置.py
回溯错误
flask - Flask-Admin 基于角色的资源权限
我正在创建一个 Flask-Admin 应用程序,该应用程序需要检查查看、编辑和删除表中某些行的权限。
即,我想:
- 仅列出用户 ID 与行的所有者 ID 匹配的行
- 让用户创建一行,如果他们有一定的角色
- 仅当用户具有特定角色时才允许用户编辑行
我可以考虑重写方法 query()、on_model_change() 等来检查编辑许可,但是:
- 用户仍然可以通过更改 URL 以显示编辑屏幕来查看该行
- 我不知道如何将 WTForms 一对多编辑列表限制为仅允许的项目
我怎样才能做到这一点?
flask - flask-security crash on itsdangerous
我很确定这是我,而不是错误 - 但如果能帮助解决这个问题,我们将不胜感激
我在它的危险中撞车了
.env/lib/python2.7/site-packages/itsdangerous.py:336: TypeError 和相关的回溯部分是:
我正在非常直接地定义应用程序:
从打印值我看到:
python - Flask-Security 修改注册表单后验证
我正在使用 Flask-WTF 和 WTForms,我有一个如下所示的表单:
我正在使用 Flask-Security,这是我的注册表单。在我的模型上,有一个名为code_id
which is a ForeignKey
field 的列。我想code
从表单中删除该字段并code_id
在我的验证器运行后添加一个字段,以便在注册期间向我的模型发送一个整数外键而不是字符串代码。我可以修改验证器中的表单,但这只会修改我所知道的表单实例,并且不会对主表单产生影响。有可能做我想做的事吗?