[Warszawa-pm] LoginSimple na PSGI

Maciej Grzybek mashester w gmail.com
Nie, 13 Lut 2011, 04:39:12 PST


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

W dniu 13.02.2011 02:05, Zbigniew Lukasiak pisze:
> Hej!
> 
> Co myślicie o czymś takim?
> 
> Załączam pierwszy eksperyment w tym kierunku - czyli dwie Aplikacje na
> Placka (LoginApp i LogoutApp) i prosta aplikacyjke która je
> wykorzystuje.
> 
> Poniżej jak to działa:
> 
> package main;
> #use LoginApp;
> #use LogoutApp;
> use Plack::Builder;
> 
> sub check_pass {
>     my( $username, $pass ) = @_;
>     if( $username eq $pass ){
>         return 0, $username;
>     }
>     else{
>         return 'Wrong username or password';
>     }
> }
> 
> builder {
>     enable 'Session';
>     mount '/login' => LoginApp->new( check_pass => \&check_pass )->to_app;
>     mount '/logout' => LogoutApp->new()->to_app;
> 
> Czyli potrzebny jest callback do sprawdzania hasła - przekazujemy to
> do LoginApp i montujemy ją pod adresem /login.  Pod /logout
> odpowiednio LogoutApp.
> 
> Całość działa tak, że po zalogowaniu przenosi nas na stronę z której
> weszliśmy do /login i to działa zarówno w przypadku gdy przechodzimy
> przez linka (jak w załączonym kodzie) jak i jeśli ze strony
> wymagającej loginu zrobimy redirecta do /login i zapiszemy adres na
> który trzeba wrócić w sesji (pod redir_to) - na przykład tak:
> $env->{'psgix.session'}{redir_to} = $env->{PATH_INFO};
> 
> Pozdrawiam,
> Zbyszek
> _______________________________________________
> Warszawa-pm mailing list
> Warszawa-pm w pm.org
> http://mail.pm.org/mailman/listinfo/warszawa-pm
> 

Zbyszku, taki mały szczegół, ale być może warto przemyśleć:
skoro umożliwiasz ustawienie redir_to przy logowaniu, dlaczego nie
pozwolisz na to przy wylogowaniu, tylko z marszu zakładasz, że
użytkownik powinien zawsze polecieć do '/'?
Przekazywanie callbacka wydaje się sensowne, ponieważ pozwala
developerowi dopasować autha pod swoje wymogi (dodatkowe warunki do
sprawdzenia etc.).
Program krótki, więc wiele do komentowania nie ma. :)

Przy okazji zadam swoje pytanie, dotyczące HTML::FormHandler'a.
Chcę zrobić formularz do zmiany hasła (standardowe pola w nim zawarte:
current_pass, new_pass, new_pass_conf). Problem w tym jak sprawdzać
current_pass?
Jak zapiszę to (current_pass) jako has_field 'password' to przy
spełnieniu wymogów (validated) zostanie nadpisane pole 'password' w
bazie, co jest efektem niepożądanym, bo otrzymamy zmianę hasła na
obecne, czyli de facto - brak jakiejkolwiek zmiany.
Z kolei jak przypnę new_pass do pola 'password' w bazie, to nie mam
dostępu do tego pola ('password') w trakcie walidacji, żeby sprawdzić
czy current_pass = password, zgadza się?
Jak takie sprawy rozwiązuje się elegancko?

Pozdrawiam,
Maciej 'mac' Grzybek
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2.0.16 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/

iQIcBAEBAgAGBQJNV9DwAAoJEJsau/Tq/KXRaRMP/0DAJGbhgiekQV/06ZAhjazv
FJm4vM8PvRhozqzxFVAj1TF2O1AsZS8LNBMzDZnlglILjw8jf8wD8K3cCDAT5wFn
LnRIq+6l0L46KyRBrErwZZJBPsHzIXHNDOlOr20I6SF536c3VHh3f5vTvRAP/yZl
rEtT2r2asHo4jbYiRH7rQ9Xfa4wrZvb1MXyZAqkMyzusOOYXey3qC4/GYN61IO0o
5ycxcUyEOjJfAkcKzBfx3CTaOqT8a0scXBIx8OKslKTVxFv0y+7QyhSMlQahG6RF
5bIBAx8YPUnuLu8jXqej//WY3vKeba0f23uVbZ9TLiciDRgqHlmnznDIs0lCVlXB
j3IL/doJNJNZzVzHaGIHh1vWjMMFrA/JIsZ6Hlo5fy8pAXij04Nyr+WAohOrELNf
b2+4fcGHd7ctqk4i/VOLRav7j/gV1rtAVAXqKCuhzDKY53QEM3uyRXJlAZip8AZr
ouw22FFxxtbmx1eIr0gQ5AJNuK8ZgqgLgryTdNrGfbtB79CaXG4lt6Z98ySxzMvq
JhyC2kPCMcI1bkjs59KplRXEEgjYYWLdLdYGw213u8+HETd3/MDhvM94Jja34NpX
0GO2yBPy6FBqVRYst4HjyQ14a2wXLIj9keCrf3i9KW8V1Hly76nbtzEbJWCOWJEk
U9dGRK5cvGZXR+/FCmGF
=8WAQ
-----END PGP SIGNATURE-----


Więcej informacji o liście Warszawa-pm