The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
package MyApp::Controller::Root;
use Moose;

BEGIN { extends 'Catalyst::Controller' }

__PACKAGE__->config( namespace => '' );

has auth_url => (
    is       => 'ro',
    required => 1,
);

no Moose;

use Data::Dump qw( dump );

sub debug_session_and_user {
    my ( $self, $c ) = @_;

    $c->log->debug( dump $c->session ) if $c->debug;  # trigger session id set

    $c->log->debug(
        "user = " . ( $c->user ? $c->user->id : '[ no user in $c ]' ) )
        if $c->debug;

}

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

    # validate the ticket and update ticket and session if necessary
    if ( $c->authenticate ) {
        $c->log->debug("authn ok") if $c->debug;
        $self->debug_session_and_user($c);
        return 1;
    }
    else {
        $c->log->debug("authn failed") if $c->debug;
        $self->debug_session_and_user($c);
    }

    # no valid login found so redirect.
    $c->response->redirect( $self->auth_url );

    # tell Catalyst to abort processing.
    return 0;
}

sub default : Private {
    my ( $self, $c ) = @_;
    $c->response->body('default page');
}

sub end : Private {
    my ( $self, $c ) = @_;
    if ( $c->user_exists ) {
        $c->response->body( "Logged in as user "
                . $c->user->id
                . ' with roles '
                . dump $c->user->roles );
    }
}

1;