Catalyst 的用户鉴定登陆

Catalyst 的用户鉴定登陆

Category: Catalyst   Keywords: Authentication Catalyst

因为最近开始有点闲下来(当然,虽说闲下来也有很多事情要做,比如毕业论文,实习,part-time job 等),于是在刚过去的一个多小时里开始了一直想写的基于 Catalyst 的论坛程序。坦白说,Catalyst 我也有很多地方都不懂,都没试验过。因为要写论坛程序,类似 Session, Authentication 这样的东西是必不可少,于是就试了下 Catalyst 的 Authentication 插件。

写个详细的流程,方便诸位再次试验。

  1. 首先当然是创建整个项目的结构:(过程部分略)
    catalsyt Foorum
    cd Foorum
    perl script/foorum_create.pl controller User
    perl script/foorum_create.pl view TT TT
    perl script/foorum_create.pl model DBIC DBIC
    ..
  2. 创建数据库 foorum, 创建表 user, 表的结构其他不管,两个字段是必须的,username 和 password
  3. 修改文件:
    • Foorum.pm
      package Foorum;

      use strict;
      use warnings;

      use Catalyst qw/
         -Debug
         ConfigLoader
         Authentication
         Authentication::Store::DBIC
         Authentication::Credential::Password
         Session
         Session::Store::File
         Session::State::Cookie
         Static::Simple/;

      our $VERSION = '0.01';

      __PACKAGE__->setup;

      sub default : Private {
      my ( $self, $c ) = @_;

      # Hello World
      $c->response->body( $c->welcome_message );
      }

      因为在 Win32 下跑,所以 Catalyst::Plugin::Session::Store::FastMmap 是安装不起来的,而我试了下 Catalyst::Plugin::Session::Store::DBI 发现报错,最后只好转为 Catalyst::Plugin::Session::Store::File .
      用 File 模块,于是在与 lib script 同级目录下创建了个文件夹 sessions
    • foorum.yml
      ---
      name: Foorum
      dsn: dbi:mysql:foorum
      dsn_user: root
      dsn_pwd: ''

      authentication:
      dbic:
      user_class: "Foorum::Model::DBIC::User"
      user_field: "username"
      password_field: "password"
      password_type: "hashed"
      password_hash_type: "SHA-1"
      session:
      expires: 3600
      storage: __HOME__/sessions

      大致看看并会明白。密码用 SHA-1 加密。
    • 修改 Model/DBIC.pm
      package Foorum::Model::DBIC;

      use strict;
      use base 'Catalyst::Model::DBIC';

      __PACKAGE__->config(
      dsn => Foorum->config->{dsn},
      password => Foorum->config->{dsn_pwd},
      user => Foorum->config->{dsn_user},
      options => { AutoCommit => 1, RaiseError => 1, PrintError => 1 },
      relationships => 1,
      );

      1;

    • 创建 Model/DBIC/User.pm
      package Foorum::Model::DBIC::User;

      use strict;
      use base 'Foorum::Model::DBIC';

      1;

  4. 上面大致就是所有的准备工作了。接下来就是对 Foorum::Controller::User 做一些动作了。
    因为是测试,所以我们先增加了一条纪录。
    package Foorum::Controller::User;

    use strict;
    use warnings;
    use base 'Catalyst::Controller';

    sub insert : Local {
       my ( $self, $c ) = @_;
       
       use Digest ();
       my $password = '123456';

       my $d = Digest->new( 'SHA-1' );
       $d->add($password);
       my $computed = $d->digest;
       
       $c->model('DBIC')->table('user')->create({
       username => 'fayland',
       password => $computed
       });
       
       $c->res->body('hi, add test user name to table.');
    }

    而 Authentication 的验证过程就开始变得简单了。因为仅仅是试验,所以就用了最简单的代码。
    sub login : Local {
       my ( $self, $c ) = @_;
       
       if ( $c->login('fayland', '123456') ) {
           $c->res->body("hello, " . $c->user->username);
       } else {
           $c->res->body('failed');
       }
    }
    大致并是如是,运行后先访问 http://fayland:3000/user/insert 来插入数据,然后运行 http://fayland:3000/user/login 来做测试。如果是 123456 屏幕就会输出 hello, fayland,不是的话就会输出 failed.

上面并是所有的大致过程。详细的查阅 Catalyst::Plugin::Authentication 或者等我继续。我还要继续写 Foorum 代码,或许过几天就会再次讲到详细的应用。have fun!

 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值