Perl 使用Dancer和Postgres的简单登录/授权系统
作为Perl的新手,我正在努力找到一种简单的方法来实现这一点。我在数据库中创建了一个非常简单的表:Perl 使用Dancer和Postgres的简单登录/授权系统,perl,postgresql,dancer,Perl,Postgresql,Dancer,作为Perl的新手,我正在努力找到一种简单的方法来实现这一点。我在数据库中创建了一个非常简单的表: CREATE TABLE users ( id SERIAL NOT NULL PRIMARY KEY, username TEXT NOT NULL, password TEXT NOT NULL); 到目前为止,我使用了一个简单的登录系统,该系统具有我在网上找到的硬编码用户名和密码: package Example; use Dancer ':syntax'; our $VERSION
CREATE TABLE users (
id SERIAL NOT NULL PRIMARY KEY,
username TEXT NOT NULL,
password TEXT NOT NULL);
到目前为止,我使用了一个简单的登录系统,该系统具有我在网上找到的硬编码用户名和密码:
package Example;
use Dancer ':syntax';
our $VERSION = '0.1';
set session => "Simple";
get '/' => sub {
# template 'index',{},{layout => 0};
template 'index';
};
before sub {
if (! session('user') && request->path_info !~ m{^/login}) {
var requested_path => request->path_info;
request->path_info('/login');
}
};
get '/login' => sub {
# Display a login page; the original URL they requested is available as
# vars->{requested_path}, so could be put in a hidden field in the form
template 'login', { path => vars->{requested_path} }, {layout => 0};
};
post '/login' => sub {
# Validate the username and password they supplied
if (params->{user} eq 'user' && params->{pass} eq 'letmein') {
session user => params->{user};
redirect params->{path} || '/';
} else {
redirect printf 'login failed';
}
};
get '/logout' => sub {
session->destroy;
redirect '/';
};
如何开始链接数据库,然后将用户输入的内容与数据库中的内容进行匹配?我什么时候实现密码的散列呢?任何教程都将不胜感激-我一直在使用Metapan,但它没有提供我需要的详细信息 最简单的方法:
下面是一篇关于如何正确操作的好文章:
问候,,
Andras为您处理了大量样板代码。您可以启动并运行一个简单的登录系统,而无需编写任何自己的/login
路由,如下所示
配置Dancer::Plugin::Auth::Extensible
安装并将其添加到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,您应该使用一个文件来存储连接凭据。确保该文件不是世界可读的。有关示例,请参见。测试您的凭据文件是否在命令行上工作,以及您的Web服务器是否可以读取它
您现有的表似乎与文档中的一致,但即使不一致,也可以在中调整表和列名
封锁你的路线
将require\u login
关键字添加到要保护的路由。/login
路由将使用基本登录表单自动生成,但如果您愿意,也可以
lib/MyApp.pm
package MyApp;
use Dancer ':syntax';
use Dancer::Plugin::Auth::Extensible;
our $VERSION = '0.1';
get '/' => require_login sub {
template 'index';
};
true;
(是的,这就是你需要编写的全部代码。我告诉过你,它需要处理很多样板文件。)
用于自动散列密码。注意不要在数据库中存储明文密码;将用户添加到数据库时,应生成密码哈希并存储该哈希
请注意,在此示例中禁用了角色。如果启用角色,则只能允许具有管理员角色的用户查看管理员页面。您看过舞者降临节日历中的这些文章吗?而且(后者是关于,它带走了很多样板文件)。@ThisSuitesBlack不是我有,我正试图使用第二个,但对如何实现它感到困惑。我下载了目录,被所有的文件压得喘不过气来,不知道我需要什么样的部分!你下载了什么目录?@ThisSuitesBlack不是他们的例子:我还是不知道你在说什么。如果你的意思是你下载了
Dancer::Plugin::Auth::Extensible::Provider::Example
,这是一个如何编写你自己的Auth插件的示例,你不需要这样做,因为它已经存在了。显然我不明白代码怎么会这么简单-非常感谢@不用谢。文档中有很多信息需要消化,特别是如果您是Perl和Dancer新手的话。
package MyApp;
use Dancer ':syntax';
use Dancer::Plugin::Auth::Extensible;
our $VERSION = '0.1';
get '/' => require_login sub {
template 'index';
};
true;