[Catalyst] Re: Persistent login

Kieren Diment diment at gmail.com
Tue May 22 01:25:41 GMT 2007


On 17/05/07, Michael Reece <mreece at vinq.com> wrote:
> there's no especially sane way to extend the session cookie on a per-
> user basis that i have found.
>
>
> here is a hack that i am experimenting with:
>
> if ($c->login($username, $password)) {
>      $c->session->{remember_me} = $c->req->params->{remember_me};
>      # ...
> }
>
> and in package MyApp.pm (or a plugin or a subclass of the
> State::Cookie plugin or ...)
>
> sub calculate_session_cookie_expires {
>      my $c = shift;
>      return $c->session->{remember_me}
>          ? time() + 60 * 60 * 24 * 90   # 90 days
>          : $c->NEXT::calculate_session_cookie_expires(@_);
> }
>
>
> On May 15, 2007, at 6:47 PM, Evaldas Imbrasas wrote:
>
> > On 5/15/07, Jonathan Rockway <jon at jrock.us> wrote:
> >> Use the session plugin and set the session expiration to ... 1
> >> week.  If some
> >> data needs to expire sooner than that ... expire it sooner than that.
> >>
> >> Here's what I would do.  Create a session and log the user in.
> >> Store a "last
> >> login" time in the user_class.  If the last_login (or last_activity;
> >> whatever) is too long ago, delete data from the session and start
> >> over.
> >
> > Yep, makes sense. However, even in that case, I was hoping that the
> > standard session/auth plugins would support this functionality without
> > doing anything additional in my Controller::Auth, i.e.:
> >
> > if ($c->req->params->{login_remember}) {
> >  $c->login($email, $password, $expires_long);
> > } else {
> >  $c->login($email, $password, $expires_short);
> > }
> >
> > Am I wrong in thinking that pretty much any decent login system has to
> > support this anyway?.. (This is my first Catalyst project, so I
> > wouldn't be surprised if there's a one-liner out there that would
> > solve this problem without a need for the above - sorry if that's the
> > case.)

In WIAB::Controller::User:

sub auto : Private {
    my ($self, $c) = @_;
    $c->stash->{template} = 'login.tt';
    if(!$c->login()) {
        $c->stash->{message} = 'Please login.';
    }
    else {
        if ($c->req->param('public') ) {
            $c->session_expire_key( __user => 600 );
        }
        $c->res->redirect($c->uri_for('/'));
    }

}



http://websiteinabox.googlecode.com/svn/trunk/WIAB/lib/WIAB/Controller/User.pm



More information about the Catalyst mailing list