用于使用密码进行认证访问的 Datasette 插件
在 Datasette 的同一环境中安装此插件。
datasette install datasette-auth-passwords
此插件的演示正在运行,网址是 https://datasette-auth-passwords-demo.datasette.io/
演示配置为向所有人显示 public.db
数据库,但 private.db
数据库仅对登录用户显示。
您可以在 https://datasette-auth-passwords-demo.datasette.io/-/login 处登录,使用用户名 root
和密码 password!
。
此插件基于一组硬编码在插件配置中的用户名/密码账户列表工作。
首先,您需要创建一个密码哈希。有三种方法可以做到
- 安装插件后,使用位于
/-/password-tool
的交互式工具 - 使用该工具的托管版本,网址是 https://datasette-auth-passwords-demo.datasette.io/-/password-tool
- 使用
datasette hash-password
命令,如下所述
现在将以下内容添加到您的 metadata.json
{
"plugins": {
"datasette-auth-passwords": {
"someusername_password_hash": {
"$env": "PASSWORD_HASH_1"
}
}
}
}
现在可以在运行 Datasette 时在环境变量中指定密码哈希。您可以这样做
PASSWORD_HASH_1='pbkdf2_sha256$...' \
datasette -m metadata.json
请务必在此处使用单引号,否则密码哈希中的 $
符号可能会被您的 shell 错误解释。
您现在可以使用 /-/login
处的表单登录到您的实例,用户名为 someusername
,密码为您用于创建哈希的密码。
您可以在配置中包含任意数量的账户,每个账户都有不同的用户名。
此插件提供了一个新的 CLI 命令,datasette hash-password
。您可以在不带参数的情况下运行此命令,以交互方式创建新的密码哈希
datasette hash-password
Password:
Repeat for confirmation:
pbkdf2_sha256$260000$1513...
或者,如果您想将其用作脚本的一部分,可以添加 --no-confirm
选项,以直接从传递给标准输入的值生成哈希
echo 'my password' | datasette hash-password --no-confirm
pbkdf2_sha256$260000$daa...
默认情况下,登录用户将生成一个仅包含其用户名的 actor 块
{
"id": "someusername"
}
您可以通过包含一个 "actors"
配置块来自定义用于用户名的 actor,如下所示
{
"plugins": {
"datasette-auth-passwords": {
"someusername_password_hash": {
"$env": "PASSWORD_HASH_1"
},
"actors": {
"someusername": {
"id": "someusername",
"name": "Some user"
}
}
}
}
}
此插件默认使用 HTML 表单实现登录,该表单设置了一个签名的认证 cookie。
您也可以配置为使用 HTTP 基本认证来代替。
为此,在您的插件配置中的 datasette-auth-passwords
块中添加 "http_basic_auth": true
。
此选项引入以下行为
- 账户用户名和密码的配置方式与基于表单的认证相同
- Datasette 中的每个页面 - 即使是通常不使用认证的页面,例如静态资源 - 都会显示浏览器登录提示
- 用户将无法退出,除非完全关闭浏览器
此模式的演示位于 https://datasette-auth-passwords-http-basic-demo.datasette.io/ - 使用用户名 root
和密码 password!
登录
如果您使用 datasette publish 命令发布数据,您可以使用 --plugin-secret
选项来安全地配置您的密码哈希(参见 秘密配置值)。
您可以像这样运行命令
datasette publish cloudrun mydatabase.db \
--install datasette-auth-passwords \
--plugin-secret datasette-auth-passwords root_password_hash 'pbkdf2_sha256$...' \
--service datasette-auth-passwords-demo
这将允许您以用户名 root
登录,使用的密码是您用于创建哈希的密码。
要在本地设置此插件,首先检出代码。然后创建一个新的虚拟环境
cd datasette-auth-passwords
python3 -mvenv venv
source venv/bin/activate
或者如果您正在使用 pipenv
pipenv shell
现在安装依赖项和测试
pip install -e '.[test]'
运行测试
pytest