代码之家  ›  专栏  ›  技术社区  ›  jeffez

Perl Dancer2身份验证密码管理

  •  0
  • jeffez  · 技术社区  · 7 年前

    因此,任何使用perl dancer的人都知道,要在登录时对用户进行身份验证,可以调用authenticate\u user

    authenticate_user(
        params->{username}, params->{password}
    );
    

    这是Auth::可扩展插件的一部分。

    使用dancer Passphrase插件,我可以验证用户名和密码,甚至不需要依赖authenticate\u用户来验证。但是对于dancer框架来说,要考虑登录的用户,您仍然需要调用authenticate\u user,该用户必须被传递密码。

    2 回复  |  直到 7 年前
        1
  •  1
  •   Don Jones    7 年前

    首先,我会重复“你几乎肯定不需要使用 authenticate_user() “注释。插件可以为您处理所有这些。

    然而,“它不散列”是错误的;下面是它的工作原理。这个 authenticate_user 每一个都会询问提供商的 authenticate\u user() 用户名和密码。这个 Database 提供者(和其他人)获取 $self->match_password() Provider role )验证;该代码检查存储的密码是否来自 数据库以 {scheme} Crypt::SaltedHash->validate 验证用户提供的密码(在 纯文本,因为它刚刚通过网络输入)匹配存储的、散列的 密码剑( $correct 下面的代码是存储的密码):

    if ( $correct =~ /^{.+}/ ) {
    
        # Looks like a crypted password starting with the scheme, so try to
        # validate it with Crypt::SaltedHash:
        return Crypt::SaltedHash->validate( $correct, $given );
    }
    

    如果提供的密码与该散列匹配,则返回。

    关于存储的散列密码应该是什么样子的示例,下面是 捆绑的输出 generate-crypted-password

    [davidp@supernova:~]$ generate-crypted-password 
    Enter plain-text password ?> hunter2
    Result: {SSHA}z9llSLkkAXENw8FerEchzRxABeuJ6OPs
    

    Crypt::SaltedHash doco 有关哪些算法节奏的详细信息 它支持的,以及它使用的格式(来自RFC-3112和 通过使用不同的数字算法进行扩展”)。

    请记住,后面的代码 authenticate\u用户 正是使用的

    举个例子,让插件帮你完成工作,考虑一下:

    get '/secret' => require_login sub {
        my $user = logged_in_user();
        return "Hi, $user->{username}, let me tell you a secret";
    };
    

    ... 就是这样。这个 require_login 如果用户已登录,如果未登录,请将其重定向到登录页面 登录。你不需要打电话 authenticate\u用户 你自己,你 logged_in_user() 将返回有关登录用户的信息的hashref(以及因为 路线代码为 需要登录 点,所以你不需要检查)。

    如果你需要检查他们是否有合适的角色,而不仅仅是他们 已登录,然后查看 require_role 而是在文档中。

        2
  •  1
  •   Dave Cross    7 年前

    在文档中 Dancer2::Plugin::Auth::Extensible authenticate_user() 说:

    通常,您希望让内置的登录处理代码处理身份验证用户,但如果您需要自己进行验证,该关键字接受用户名和密码。。。

    我自己没有使用过这个模块,但在我看来,所有的哈希和加密内容都应该由一个 authentication providers 如果没有一个覆盖你使用的案例,那么你可以 write one yourself .

    Dancer2::Plugin::Passphrase . 我想知道是否应该考虑为其编写一个Auth::可扩展样式的身份验证提供程序。