Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使用请求登录到具有flask安全性的rest api_Python_Flask_Flask Restful_Flask Security - Fatal编程技术网

Python 如何使用请求登录到具有flask安全性的rest api

Python 如何使用请求登录到具有flask安全性的rest api,python,flask,flask-restful,flask-security,Python,Flask,Flask Restful,Flask Security,我已禁用CSRF,但无法从本地前端服务器使用基于角色授权的Flask Security登录REST API。我确实进行了登录,但我认为,请求中没有存储cookie,因此我一直在前端服务器上获取登录页面。这是我正在使用的代码: payload = {'username': request.form['username'], 'password': request.form['password']} with requests.Session() as s: r = s.p

我已禁用CSRF,但无法从本地前端服务器使用基于角色授权的Flask Security登录REST API。我确实进行了登录,但我认为,请求中没有存储cookie,因此我一直在前端服务器上获取登录页面。这是我正在使用的代码:

 payload = {'username': request.form['username'], 'password': request.form['password']}
    with requests.Session() as s:
        r = s.post('http://localhost:5002/login', data=payload)
        print(s.cookies)
        if r.ok:
            r2 = s.get('http://localhost:5002/protected', cookies=s.cookies)

是否有办法维护登录的前端客户端的会话以显示受保护的内容?

Flask Security LoginForm不接受“用户名”-该字段称为“电子邮件”。现在-您可以在该字段中发送用户名,如果您正确配置了安全性\u标识\u属性-它应该在数据库中查找“用户名”列

第二,我想指出,仅仅因为您正在使用请求并不意味着您正在发送JSON,事实上您正在发送表单输入。所以Flask Security总是用一个表单来响应—您基本上不会看到除了200之外的任何东西—响应主体包含一个包含各种错误消息的“表单”


所以-2件事-如果您想要REST-那么做-新版本的请求使用参数json=并将做正确的事情。如果您这样做,我相信您将开始收到400条回复。

您不必向第二个请求传递cookies。如果您删除
cookies=s.cookies
,会发生什么情况?仍然没有,我得到登录视图您的
打印(s.cookies)
打印任何内容吗?
我可以帮助您缩小问题范围,但我无法用您发布的内容解决问题。我只能告诉你,
/login
页面没有在会话中设置任何cookie。这就是你的第二个请求失败的原因。谢谢!你知道我如何处理剩下的和前端之间的饼干吗?因此,他们共享它们—这取决于您的前端—如果是基于浏览器的(例如Vue、react等),那么浏览器当然会处理这一问题。如果您通过ReST执行服务器到服务器的操作,那么请求会话将为您执行此操作。请注意,对于服务器到服务器,您可能需要考虑使用认证令牌模型而不是会话。请稍稍解释一下,我正在使用服务器通过REST服务器。