问题标签 [flask-httpauth]

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 回答
713 浏览

flask - 了解 Flask-HTTPAuth 上的装饰器

我想了解@auth.verify_password 装饰器在此程序中的使用方式和时间。如果我导航到路由http://127.0.0.1:5000,我知道我需要传入用户名和密码,@auth.login_required 将对其进行验证,但 @auth.verify_password 来自哪里?

@auth.login_required 会调用它吗?

0 投票
0 回答
1245 浏览

python - Flask 身份验证装饰器

目前我在我的 API 中使用两种类型的身份验证:

  • 本地用户+本地密码
  • 数据库用户+数据库密码

为此,我想为每种类型定义一个装饰器。例子:

或者

目前我有一个本地身份验证装饰器的工作版本。我想为@authenticator.db_authentication. 我使用 Miguel 的帖子作为添加数据库身份验证支持的参考。

该示例当前适用于HTTPBasicAuth.

似乎是我需要覆盖auth.login_required并且auth.verify_password在使用时需要定义:@auth.login_required来处理身份验证。

理想情况下,我想在我的 API 方法中定义这样的东西:

这是需要修改的工作代码:

@auth.login_required我想改成@authenticator.db_authentication

@authenticator.local_authentication以下不同文件中的示例 :

0 投票
1 回答
334 浏览

python - 通过链接装饰器使用 Flask-HTTPAuth 创建特权用户 --- 丢失上下文?

我正在尝试使用 Flask-HTTPAuth 创建一个具有基本身份验证的两层身份验证系统。我的应用程序有两个路由,一个基本路由 at/可供任何登录用户访问,一个管理路由 at/admin仅供(如您所料)以管理员身份登录的用户访问。

所以我决定通过链接装饰器来实现这一点,代码的相关部分如下(其中 dbops 只是一个处理与数据库对话的命名空间):

只要尝试以管理员用户身份登录的任何人首先访问该/路由,这就可以正常工作:它会提示输入用户名和密码,然后管理员用户可以转到/admin并执行登录的管理员任务。

但是,如果管理员用户第一次访问/admin它不会给出登录提示。它只是抛出,在调试器中四处寻找之后,我确定它auth.username()返回一个空字符串。所以,我的猜测是,由于某种原因,内部装饰器没有被应用,因此缺少登录提示。

有谁知道这里可能会发生什么?

我的第一个假设是这是一个简单的错误,因为直到is_admin检查之后才调用管理装饰器的内部函数。因此,我尝试auth.username()在检查之前修复我调用该函数的问题——因此可能使其可用——如下:

但这只是导致了同样的行为。

我从之前的 SO中看到,库作者推荐的方法是创建两个单独的 Flask-HTTPAuth 对象。我能做到的,没问题。但很明显,我关于装饰器如何工作的心理模型失败了,所以我想独立于获得我想要工作的功能来解决这个问题......

0 投票
1 回答
1947 浏览

python - Flask-HTTPAuth 用户访问级别

我目前正在使用 Flask-RESTful 构建一个 REST API,并使用 Flask-HTTPAuth 来保护一些 put 和 get 方法。我想根据我存储在数据库中的预定义用户权限允许访问这些方法。

我的问题是,如何修改或拦截下面函数的结果,以便我可以根据端点/方法改变访问?基本身份验证清除后,我希望能够检查用户在我的数据库中是否具有相关权限。使用 Flask-Session 这很容易,但这里的 API 是无状态的。

非常感谢。

0 投票
1 回答
1070 浏览

python-3.x - 验证基本身份验证与 URL [Flask] 中的用户名相同

基本上,当我需要对用户进行身份验证时,我会在 url 和 Basic Auth 中混合发送用户名。

我的完整代码是:

我担心这部分:

我想在授权时使用变量名,但是如果有人使用他们的凭据向其他人的 url 发送请求,他们可以更改其他用户数据,所以现在我只是在这些函数中使用授权的用户名。

例如:url/u/John -uBill:password 应该标记为无效

有什么巧妙的方法可以让@login_required装饰器检查 url 是否也有效?我宁愿不要if name != u.username: ...在每条受保护路线的开头都这样做。

0 投票
1 回答
290 浏览

flask - Flask UWSGI ModuleNotFound

我有一个正在尝试为生产环境配置的 Flask 应用程序。到目前为止,在python app.pyvirtualenv 内部的测试过程中工作正常。

但是,我开始配置应用程序以开始使用 UWSGI。当我尝试使用启动 Flask 应用程序时

$ uwsgi -s /tmp/myapplication.sock --manage-script-name --mount /myapplication=app:app --virtualenv /path/to/my/venv

我得到一个

ModuleNotFoundError:没有名为“flask_httpauth”的模块

我想知道是否有人有使用该身份验证模块的经验,以及他们是否对我应该做什么有任何建议。我不确定为什么开发服务器启动时没有问题,但是 uwsgi 服务器(我传递了用于开发服务器的相同 virtualenv)遇到导入问题

0 投票
0 回答
274 浏览

flask-session - 在会话中使用烧瓶 auth.verify_password

我正在努力让身份验证正常工作。我通过 api 而不是 Web 应用程序来控制登录行为。为此,我正在使用flask sessionand HTTPBasicAuth()。用户登录后直到他注销,我不希望他为每个对 api 的请求重新登录(或)发布身份验证。为此,我正在利用session['username'].

我的代码auth.verify_password如下。

下次我打电话时get_products,我不想传递auth给请求标头。当我这样做时,上面的代码不起作用。我觉得在某处(或)我的方法完全错误的地方缺少一些代码。session['username']似乎并没有持续下去。它每次都必须通过登录方法,而我的目标是跳过登录,直到用户注销。在这里欣赏任何建议。

0 投票
3 回答
3006 浏览

python - 使用 Celery worker 与 SQLAlchemy DB 交互,包括从请求中了解用户

我对此进行了大量研究,包括尝试这样的答案。看来 Celery 无法访问我的 Flask 应用程序的上下文。

我非常清楚我的 celery 对象,什么将装饰我的任务,必须能够访问我的 Flask 应用程序的上下文。我相信它应该,因为我按照指南创建了我的芹菜对象。我不确定混淆是否存在于我使用 Flask-HTTPAuth 的事实中。

这是我所拥有的一些东西。

但是,使用 Flask 运行这个任务是不行的。我尝试通过点击服务器来启动此功能(授权时!)。

但是 Celery 工人告诉我任务raised unexpected: AttributeError("'_AppCtxGlobals' object has no attribute 'user'",),我相信这意味着,如上所述,我的 celery 对象没有应用程序上下文,即使我使用了推荐的工厂模式。

0 投票
2 回答
402 浏览

python - 如何在运行时替换装饰器?

我正在尝试调整另一个 StackOverflow 答案,有条件地应用装饰器,只需要登录特定环境(最终是一个staging环境,但development直到我得到这个工作)。为此,我从以下内容开始

当我启动服务器时,我得到一个RuntimeError: Working outside of application context错误。在尝试了这个问题的早期版本的一些建议之后,我得到了RuntimeError消失,但是当我想要的时候,装饰器仍然没有被正确应用。这是当前版本:

这永远不会返回auth.login_reqired函数。它总是让浏览器在没有身份验证的情况下进入。

所以,我尝试将条件更改为

然后出现身份验证。

是的,我export ENV=development在 shell 中做了一个并用env命令确认它。但即便如此,它也没有像我预期的那样读取环境变量。

也许这只是错误的做法?我的最终目标是要求在一个特定环境中进行身份验证。这可能与我正在走的路吗?有可能吗?

0 投票
0 回答
311 浏览

python - 如何在多文件项目中正确使用flask @auth.login_required?

我的 Flask API REST 服务器变得越来越大,所以我决定将方法(url)拆分为不同的子文件。

我以前的版本(单文件应用程序)使用 verify_password() 回调函数来覆盖标准方法,如本例所示:https ://github.com/miguelgrinberg/REST-auth/blob/master/api.py

现在,在我的新多文件项目中,我需要从任何单个文件中的所有 @auth.login_required 装饰器访问 verify_password() 函数,但我找不到让它工作的方法。

我能怎么做?问候