Somehing like that? ------------------- cut here ------------------------- # ------------- # Main MyFancyApp.pm # ------------- use utf8; package MyFancyApp; use Dancer2; use Dancer2::Plugin::DBIC; use Dancer2::Plugin::Auth::Tiny; use Dancer2::Plugin::Deferred; use YAML; use Cache::Memcached;
our $VERSION = '0.1'; prefix undef; # ------------- # Inside each controller that requires authentication # (may be better in a Dancer::Plugin::Auth::Tiny::MySpecialAuthExtension?) # ------------- Dancer2::Plugin::Auth::Tiny->extend( role => sub { my ($dsl, $Roles, $coderef) = @_; if ( ref $Roles eq '' ) { $Roles = [ $Roles ]; } return sub { my $SessionData = $dsl->app->session->read('User'); if ( grep { $SessionData->{'Roles'}->{$_} } @{$Roles} ) { goto $coderef; } else { $dsl->app->redirect('/auth/login'); } }; } ); # Paths start that way get '' => needs role => ['Root', 'Admin', ] => sub { } # --------------- # Authentication part # --------------- use utf8; package MyFancyApp::Auth::Login; use Dancer2 appname => 'MyFancyApp'; use Dancer2::Plugin::DBIC; use Dancer2::Plugin::Auth::Tiny; use Dancer2::Plugin::Deferred; use Dancer2::Plugin::Passphrase; prefix '/auth'; post '/login' => sub { my %Param = params; my $Login = $Param{login}; # If the login doesn't contain a dot and characters before and after # Login failed => display username unknown in class alert-warning and redirect to auto login again if ( $Login !~ /(.+)\.(.+)/ ) { deferred error => 'Username unknown.'; deferred class => 'alert-warning'; redirect '/auth/login'; }; my $Ident = $1; my $User = $2; my $Password = $Param{password}; my $PasswordHashed = passphrase( $Password )->generate; $RS = schema('default')->resultset('User')->search( { 'company.ident' => $Ident, 'login' => $User, 'password' => $PasswordHashed, }, { join => 'company', }, ); if ( ! $RS ) { deferred error => 'Username or password incorect.'; deferred class => 'alert-warning'; redirect '/auth/login'; } my $CompanyID = $RS->company->id; my $UserID = $RS->id; my %Roles; for my $Role ( $RS->user_roles->all ) { $Roles{$Role->role->name} = 1; } session->write( 'User' , { User => $Login, Ident => $Ident, Login => $User, Roles => \%Roles, CompanyID => $CompanyID, UserID => $UserID, }, ); my $SessionData = session->read('User'); return redirect params->{return_url} || '/'; }; post '/logout' => sub { my %Param = params; session->delete('User'); deferred error => 'Logout successful.'; deferred class => 'alert-success'; return redirect '/auth/login'; }; # --------------- # Config # --------------- # Inside config.yml session: Memcached engines: session: Memcached: memcached_servers: - 127.0.0.1:11211 - /var/sock/memcached plugins: Auth::Tiny: login_route: /auth/login ------------------- cut here ------------------------- > Am 11.10.2018 um 22:31 schrieb John Stoffel <j...@stoffel.org>: > > > What I'd love to see if an example of CRUD with Authentication, in a > skeleton format so I can steal it for my own needs. I'm too > dumb/busy/lazy to make it all work myself. *grin* > _______________________________________________ > dancer-users mailing list > dancer-users@dancer.pm > http://lists.preshweb.co.uk/mailman/listinfo/dancer-users _______________________________________________ dancer-users mailing list dancer-users@dancer.pm http://lists.preshweb.co.uk/mailman/listinfo/dancer-users