问题标签 [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.

0 投票
1 回答
1656 浏览

python - 移动端 Flask API 的用户认证

我正在 Flask 中制作一个 API,用于打包和下载一个简单的 jQuery mobile + PhoneGap 应用程序。据我了解,对数据库的所有调用都应使用 JavaScript、AJAX 和 JSON 进行。由于该应用程序是关于用户的,并且所有视图都从登录的用户那里获取数据,所以我不确定如何进行身份验证。据我了解,工作流程应该是:

  • 用户登录(json 编码的用户名和密码)
  • 服务器为该用户生成具有到期时间(即 24 小时)的令牌
  • 此令牌作为 cookie 保存在移动应用程序或本地存储中
  • 所有对服务器的调用都是使用这个标识当前用户的令牌完成的:/api/token=12345
  • 当令牌过期时,需要新的登录提示

我想用Flask-Security 的 authentication token来实现这个。有没有更直接的方法来实现这一点?

0 投票
3 回答
4193 浏览

python - 通过用户名而不是电子邮件登录烧瓶安全性

我想在User模型中有字段,用户通过它登录username而不是email

我定义:
app.config['SECURITY_USER_IDENTITY_ATTRIBUTES'] = 'username'

但我仍然得到:

似乎电子邮件被硬编码到烧瓶安全中......

我可以改变它吗?

编辑:用户模型(根据评论中的要求):

0 投票
2 回答
1362 浏览

flask - 如何自定义 flask.ext.security.forms.LoginForm 以提示和使用用户名而不是电子邮件?

如何自定义 flask.ext.security.forms.LoginForm 以提示和使用用户名而不是电子邮件?

我试过这个,

换了模板,

更改了用户db以使用名称而不是电子邮件

但是烧瓶安全仍然尝试在数据存储区而不是用户中查找电子邮件。

0 投票
2 回答
1293 浏览

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 模板:

0 投票
4 回答
21132 浏览

security - 如何使用烧瓶安全保护烧瓶管理面板

我希望保护使用 Flask 制作的 Web API 并与之集成flask-admin以提供管理界面。我搜索并发现 flask-admin 有一个管理面板,/admin默认情况下任何人都可以访问它。它不提供身份验证系统并且完全开放(没有任何安全性),因为他们没有假设将使用什么来提供安全性。这个 API 必须在生产中使用,所以我们不能/admin为每个点击 url 的人提供开放的路线。需要适当的身份验证。

views.py我不能简单地放置/admin路由并通过装饰器提供身份验证,因为这将覆盖已经创建的现有路由flask-admin,从而导致错误。

进一步的研究表明,有两个模块flask-adminflask-security. 我知道flask-adminis_accessible保护它的方法,但它没有提供flask-security.

我还没有找到任何方法来保护端点/admin以及所有其他/admin/admin/<something>.

我正在寻找专门用烧瓶安全性来完成这项任务。如果不可能,请提出替代方案。

PS:我知道我可以锁定ngnix自己,但那将是最后的选择。如果我可以通过它拥有一个身份验证系统flask-security会很好。

0 投票
4 回答
3868 浏览

python - 管理员(仅限)用户注册,Flask-Security

我目前正在使用 Flask-Security(包括 Flask-WTForms、Flask-SQLalchemy 和 Flask-Login)为 web 应用程序构建登录。我已经能够相当轻松地设置我的大部分登录流程,包括忘记密码;但是我想这样做,以便用户注册的唯一方法是通过只有管理员可以访问的页面。我设法配置了角色(管理员、用户)并设置了以下视图:

这将创建成功限制为具有管理员角色的帐户的门户。但是,我不确定如何在这里进行,因为 Flask-security 没有内置的方法来启用我正在尝试做的事情。

我已经覆盖了 RegisterForm 以通过正则表达式强制执行密码规则:

基本上我想要一个位于 /adminregister 的表单,当管理员访问该表单时,它允许输入电子邮件地址,此时首先在数据库中使用随机且安全的密码创建用户,然后执行类似的过程发生忘记密码并创建 1 次密码代码以重置密码。

我看过的有用的东西:

  1. 在 flask-security/views.py 中有忘记的密码代码:

    /li>
  2. 在 flask_security/registerable.py 中有 register_user 的代码

    /li>

我想以某种方式将这两者结合起来,以便在“/adminregister”中提交具有唯一字段“电子邮件”的表单后,电子邮件会在数据库中添加一个安全的随机密码,并且电子邮件地址会发送一封电子邮件,其中包含链接以更改密码(最好是一条消息解释)。我什至不确定我会在哪里添加这样的代码,因为没有什么可以专门覆盖,特别是因为我找不到覆盖 RegisterForm 以拥有更少的字段和相同的功能的方法。

我的代码结构与 flask-security 文档的quickstart 一致

提前感谢您提供的任何指导。

0 投票
3 回答
17277 浏览

python - AttributeError:类型对象“用户”没有属性“查询”

我有一个用 sqlalchemy 构建和填充的大型数据库(原始的 - 不是 flask-SQLAlachemy)。我想在网站上添加烧瓶安全性,我意识到它依赖于烧瓶-SQLAlchemy(而不是原来的),但我的理解是烧瓶-SQLAlchemy 可以使用(刚开始尝试了解更多关于它的信息)原本的。将用户输入数据库似乎可行。当我导航到受限页面时,它会提示我登录(应该如此)。输入正确的电子邮件地址和密码时,我收到错误AttributeError: type object 'User' has no attribute 'query'消息,并且由于错误的回溯没有引用我的任何代码,我不知道如何解决它。

认为这可能是 sqlalchemy 到 flask-SQLAlchemy 的转换问题,我觉得除了创建新数据库之外我已经尝试了所有方法。我在 flask-security 或 flask-SQLAlchemy 文档中没有找到任何可以帮助解决此问题的内容。任何人都知道如何解决这个问题?

这是我的代码:

测试.py

数据库设置.py

回溯错误

0 投票
1 回答
1769 浏览

flask - Flask-Admin 基于角色的资源权限

我正在创建一个 Flask-Admin 应用程序,该应用程序需要检查查看、编辑和删除表中某些行的权限。

即,我想:

  • 仅列出用户 ID 与行的所有者 ID 匹配的行
  • 让用户创建一行,如果他们有一定的角色
  • 仅当用户具有特定角色时才允许用户编辑行

我可以考虑重写方法 query()、on_model_change() 等来检查编辑许可,但是:

  • 用户仍然可以通过更改 URL 以显示编辑屏幕来查看该行
  • 我不知道如何将 WTForms 一对多编辑列表限制为仅允许的项目

我怎样才能做到这一点?

0 投票
0 回答
254 浏览

flask - flask-security crash on itsdangerous

我很确定这是我,而不是错误 - 但如果能帮助解决这个问题,我们将不胜感激

我在它的危险中撞车了

.env/lib/python2.7/site-packages/itsdangerous.py:336: TypeError 和相关的回溯部分是:

我正在非常直接地定义应用程序:

从打印值我看到:

0 投票
1 回答
196 浏览

python - Flask-Security 修改注册表单后验证

我正在使用 Flask-WTF 和 WTForms,我有一个如下所示的表单:

我正在使用 Flask-Security,这是我的注册表单。在我的模型上,有一个名为code_idwhich is a ForeignKeyfield 的列。我想code从表单中删除该字段并code_id在我的验证器运行后添加一个字段,以便在注册期间向我的模型发送一个整数外键而不是字符串代码。我可以修改验证器中的表单,但这只会修改我所知道的表单实例,并且不会对主表单产生影响。有可能做我想做的事吗?