Dancer::Plugin::Auth::Extensible https://metacpan.org/pod/Dancer::Plugin::Auth::Extensible为您处理大量样板代码。您可以启动并运行一个简单的登录系统,而无需编写任何自己的系统/login
路线如下。
配置Dancer::Plugin::Auth::Extensible
Install Dancer::Plugin::Database https://metacpan.org/pod/Dancer::Plugin::Database and Dancer::Plugin::Auth::Extensible::Provider::Database https://metacpan.org/pod/Dancer::Plugin::Auth::Extensible::Provider::Database并将其添加到config.yml
:
session: "YAML"
plugins:
Auth::Extensible:
realms:
users:
provider: 'Database'
disable_roles: 1
配置数据库连接
配置您的数据库连接environments/development.yml
这样您就可以为开发和生产提供不同的配置。这就是 MySQL 的配置,连接凭据(数据库名称、主机、用户名和密码)存储在单独的选项文件中database.cfg
:
plugins:
Database:
dsn: 'dbi:mysql:;mysql_read_default_file=/path/to/database.cfg'
dbi_params:
RaiseError: 1
AutoCommit: 1
对于 Postgres,您应该使用.pgpass http://www.postgresql.org/docs/9.4/static/libpq-pgpass.html文件来存储您的连接凭据。确保该文件不可读。看这个堆栈溢出帖子 https://stackoverflow.com/a/19980156/176646举个例子。测试您的凭据文件是否可以在命令行上运行并且您的网络服务器可以读取它。
您现有的表似乎符合建议的模式 https://metacpan.org/pod/Dancer::Plugin::Auth::Extensible::Provider::Database#SUGGESTED-SCHEMA在文档中,但即使没有,您也可以调整表和列名称配置 https://metacpan.org/pod/Dancer::Plugin::Auth::Extensible::Provider::Database#CONFIGURATION.
锁定你的路线
Add the require_login
关键字到您想要保护的路由。 A/login
路线将通过基本登录表单自动生成,尽管您可以创建你自己的 https://metacpan.org/pod/Dancer::Plugin::Auth::Extensible#Replacing-the-Default-login-and-login-denied-Routes如果你喜欢。
lib/MyApp.pm
package MyApp;
use Dancer ':syntax';
use Dancer::Plugin::Auth::Extensible;
our $VERSION = '0.1';
get '/' => require_login sub {
template 'index';
};
true;
(是的,这确实是您必须编写的所有代码。我告诉过您它会处理很多样板文件。)
Crypt::SaltedHash https://metacpan.org/pod/Crypt::SaltedHash用于自动散列密码。请注意,您永远不应该在数据库中存储明文密码;当您将用户添加到数据库时,您应该生成密码的哈希值并存储该哈希值。
请注意,在此示例中角色被禁用。如果您启用角色,您可以做其他有趣的事情 https://metacpan.org/pod/Dancer::Plugin::Auth::Extensible#Keywords就像只允许具有管理员角色的用户查看管理页面。