提前道歉,我的问题可能有点晦涩。尽管我看了很多资料,仍然无法理解。如果您能解释一下将会非常好。
在 Flask-Login 中,request_loader 的目的是什么?它如何与 user_loader 装饰器交互?
如果我使用基于令牌的身份验证系统(我计划将令牌发送到我的 AngularJS 前端,在那里存储令牌并将该令牌发送到授权标头中),我是否需要一个 request_loader,还是只需要一个 user_loader(在其中检查 auth 标头并查看用户是否存在)就足够了?
提前道歉,我的问题可能有点晦涩。尽管我看了很多资料,仍然无法理解。如果您能解释一下将会非常好。
在 Flask-Login 中,request_loader 的目的是什么?它如何与 user_loader 装饰器交互?
如果我使用基于令牌的身份验证系统(我计划将令牌发送到我的 AngularJS 前端,在那里存储令牌并将该令牌发送到授权标头中),我是否需要一个 request_loader,还是只需要一个 user_loader(在其中检查 auth 标头并查看用户是否存在)就足够了?
来自 Flask-Login 文档:
有时您想要登录用户而不使用 cookie,例如使用标题值或作为查询参数传递的 api 密钥。在这些情况下,您应该使用 request_loader 回调函数。此回调函数应与您的 user_loader 回调函数相同,只是它接受 Flask 请求而不是 user_id。
因此,回答您的问题,它们都为 Flask-Login 提供相同的功能。它们都用于加载用户。然而,request_loader
适用于自定义登录。
这是一个很棒的教程,我发现它利用了 request_loader
来利用基于令牌的身份验证(这篇文章不是我自己的,我只是分享链接):http://gouthamanbalaraman.com/blog/minimal-flask-login-example.html
request_loader
的原因。@login_required
用于保护请求访问。
你需要发出一个请求来通过认证检查。current_user
,
你的应用程序需要使用它们来让请求作为current_user
的身份。使用user_loader
可以使请求对@login_required
有效。
通常用于浏览器UI登录。
它将向浏览器存储会话cookie,并在以后使用它们进行身份验证。
所以你只需要登录一次,会话将保持一段时间。
使用request_loader
也可以与@login_required
一起使用。
但它通常与api_key或基本身份验证一起使用。
例如,由其他应用程序与您的flask应用程序交互。
不会有会话cookie,
所以你每次发送请求时都需要提供认证信息。
user_loader
和request_loader
,
现在你有2种身份验证方式用于相同的api,
受@login_required
保护,
并且可使用current_user
,非常聪明。withCredentials
配置标志设置为true
。$http.post(url,data [,config])
或者$http.get(url [,config])
,请确保config
对象包含属性withCredentials
且值为true。这将指示浏览器以与完整页面访问相同的方式使用其cookie。$http.post('/api/login',{username:'myusername',password:'mypassword'},{withCredentials:true})
{username:'myusername',password:'mypassword'}
作为post
请求提交到您的站点/应用程序的/api/login
路由,如果使用Flask-Login并已登录,则Flask会知道。$http
服务的所有请求设置此行为。$httpProvider.defaults.withCredentials=true
在你的应用程序中的某个地方。目前,我将这行代码放在我的app.config
块中,这似乎很合适:
var myApp = angular.module('myApp');
myApp.config(function ($httpProvider) {
$httpProvider.defaults.withCredentials = true;
});