Catalyst Improving your Catalyst Application #60

Authentication Controller

sub access_denied {
    my ($self, $c) = @_;
    $c->session->{login_from} = $c->req->uri;
    $c->flash->{message} = 'Please log in to continue.';
    $c->response->redirect($c->uri_for('/login'));
}
use Moose::Autobox; # for hslice;

sub login :Global ActionClass('REST') {}
sub login_GET {
    my ($self, $c) = @_;
    $c->stash->{template} = 'login.tt';
}
sub login_POST {
    my ($self, $c) = @_;
    if($c->authenticate($c->req->params->hslice([qw/username password/]))){
        $c->flash->{message} = 'You have been logged in.';
        my $from = delete $c->session->{login_from} ||
          $c->uri_for('/');
        $c->res->redirect($from);
    }
    else {
        $c->flash->{message} = 'You could not be logged in.';
        $c->res->redirect($c->uri_for('/login'));
    }
}

sub logout :Global {
    my ($self, $c) = @_;
    $c->logout;
    $c->flash->{message} = 'You have been logged out.';
    $c->res->redirect($c->uri_for('/'));
}
Infinity Interactive