Datasette 插件,根据现有域名 cookie 对用户进行身份验证。
此插件允许您在与另一个已通过身份验证的网站相同的域上托管 Datasette 实例时,为其构建自定义身份验证。
考虑一个位于 www.example.com
的网站,它支持用户身份验证。
您可以在 data.example.com
上运行 Datasette,以便它能够看到为 .example.com
域设置的 cookie。
使用此插件,您可以在 www.example.com/user-for-cookies
构建一个 API 端点,该端点根据用户的 cookie 返回一个代表当前登录用户的 JSON 对象。
运行在 data.example.com
上的插件将根据该 API 的响应使 actor
可用于 Datasette 的其余部分。
阅读有关 Datasette 的身份验证和权限系统 的信息,了解 actor 和权限如何工作的更多信息。
此插件需要在 Datasette 的 metadata.json 文件 中进行一些配置。
支持以下配置选项
api_url
:这是 Datasette 应该调用并附带用户 cookie 的 API 端点,用于识别登录用户。cookies
:可选。应传递到 API 端点的 cookie 名称列表 - 如果留空,默认情况下会发送所有 cookie。ttl
:可选。默认情况下,Datasette 会为 Datasette 自己接收到的每个 HTTP 请求向 API 端点发出请求。ttl
值为 5 将使 Datasette 缓存与用户 cookie 关联的actor
5 秒钟,从而减少 API 流量。headers
:要作为查询字符串参数转发到 API 端点的其他标头(可选)列表。
这是一个使用所有这四个设置的示例
{
"plugins": {
"datasette-auth-existing-cookies": {
"api_url": "http://www.example.com/user-from-cookies",
"cookies": ["sessionid"],
"headers": ["host"],
"ttl": 10
}
}
}
使用此配置,对托管在 data.example.com
的 Datasette 的任何访问都将导致向 http://www.example.com/user-from-cookies
API 端点发出以下请求
GET http://www.example.com/user-from-cookies?host=data.example.com
Cookie: sessionid=abc123
该 API 预计将返回一个代表当前用户的 JSON 对象
{
"id": 1,
"name": "Barry"
}
由于 ttl
设置为 10,该 actor 将针对 cookie 和标头的精确组合缓存十秒钟。当该缓存过期时,将再次访问 API。
在决定 TTL 值时,请考虑,失去对核心网站访问权的用户(例如,他们的会话过期或帐户被禁用)- 仍将能够访问 Datasette 实例,直到该缓存过期。