Clicky

Skocz do zawartości


Zdjęcie
- - - - -

[K2] Simple Auth

17 odpowiedzi w tym temacie

  • Zaloguj się, aby dodać odpowiedź

#1 thejw23

thejw23

    Senior Mastah

  • Webmastahy
  • PipPipPip
  • 824 postów

Napisano 20 luty 2009 - 22:28

teraz juz oficjalnie, ze swoja strona itp itd: http://projects.koha...how/simple-auth

jest to fork oryginalnego modulu auth, ktory:
- jest prosty
- nie korzysta z orm, tylko z auto_modeler
- bardzo latwo go dostosowac do wlasnych potrzeb
- nie posiada ograniczen w postaci wymuszonych nazw tabel w bazie
- posiada wsparcie dla 'zapamietaj mnie' przy logowaniu
- zapisuje w bazie date ostatniego logowania, ip i laczna liczbe logowan
- hasla sa kodowane wybranym algorytmem (domyslnie md5) w polaczeniu z dwoma stringami dodawanymi na poczatku i koncu hasla

domyslnie sa 3 role: admin, moderator i zwykly user (jako active) - sa to kolejne kolumny w tabeli users. nie jest i nie bedzie to dedykowany system ACL.

opcja 'zapamietaj mnie' po udanym logowaniu zapisuje w bazie oraz cookie uzytkownika unikalny token, ktory jest sprawdzany przy nastepnym wejsciu na strone.

cudow nie ma, mam tylko nadzieje, ze bledow rowniez... wszelkie uwagi mile widziane :)


#2 Helid

Helid

    Początkujący

  • Użytkownik
  • Pip
  • 19 postów

Napisano 23 luty 2009 - 11:00

Zapowiada się ciekawie, zaraz przetestuje..

#3 thejw23

thejw23

    Senior Mastah

  • Webmastahy
  • PipPipPip
  • 824 postów

Napisano 23 luty 2009 - 12:19

wlasnie koncze wersje 0.3 ;) troche zmian wewnetrznych, glownie po tym jak ze zdziwieniem musialem zaakceptowac wyniki generowane przez ten prosty skrypt:

class test {
    public $data=array('id'=>'5');

    public function  __get($key) {
         return $this->data[$key];
    }
}  

$test = new test();

echo " 1) "; echo $test->id;
echo "<br /> 2) "; if ($test->id) echo "jest";
echo "<br /> 3) "; if (!empty($test->id)) echo "jest";
echo "<br /> 4) "; if (isset($test->id)) echo "jest";
echo "<br /> 5) "; $id=$test->id; if (!empty($id)) echo "jest";
echo "<br /> 6) "; $id=$test->id; if (isset($id)) echo "jest";
echo "<br /> 7) "; if (intval($test->id)!==0) echo "jest";
echo "<br /> 8) "; if ((int) $test->id!==0) echo "jest";


moze dla innych to oczywsite, ale mnie na ponad godzine zajal tzw. WTF dla punktu 3) i 4)  :) no coz, tak to dziala, dobrze wiedziec.

#4 jarek_bolo

jarek_bolo

    Początkujący

  • Użytkownik
  • Pip
  • 65 postów
  • Skąd:łódzkie

Napisano 23 marzec 2009 - 21:14

Mam do zaproponowania małą modyfikację.

Otóż obecnie last_login nie działa tak jak według mnie powinien.
Ja dodałem do obiektu Auth_Users_Model, tymczasową właściwość real_last_login (nie będącą częścią $data) i w trakcie logowania wypełniam ją wartością z pola last_login w bazie, zanim przypisze aktualny time(). Wtedy będziemy mieć rzeczywisty last_login, bo teraz to last_login pokazuje czas logowania, które właśnie miało miejsce.

I druga sprawa to nazwa modelu kłóci się z regułami przyjętymi w Kohanie, które to mówią, że model powinien mieć nazwę w liczbie pojedynczej, a więc Auth_User_Model.

Co Ty na to ?
Jam jest Polska, Ojczyzna Twoja, ziemia Ojców, z której wzrosłeś. Wszystko, czym jesteś, po Bogu - mnie zawdzięczasz!!

#5 thejw23

thejw23

    Senior Mastah

  • Webmastahy
  • PipPipPip
  • 824 postów

Napisano 23 marzec 2009 - 22:09

last_login w zasadzie mialem wywalic, bo dodalem ostatnio time_stamp, ktore jest automatycznie aktualizowane przez simple_modeler, nie trzeba tego kontrolowac w simple_auth. aktualizacja jest w complete_login() i powinna byc przy kazdym logowaniu i auto_logowaniu. czyli nie tylko po kliknieciu na button login w formularzu, ale tez po powrocie, jak juz sie zamknie przegladarke i ponownie odpali. tak to powinno dzialac i jesli zauwazyles, ze jest inaczej napisz jak to u ciebie jest, moze faktycznie jest jakis blad.

co do nazwy modelu, to racja, trzeba by to zmienic... poczekam z tym do kolejnej wersji, na jakies poprawki ew. nowe pomysly.

#6 jarek_bolo

jarek_bolo

    Początkujący

  • Użytkownik
  • Pip
  • 65 postów
  • Skąd:łódzkie

Napisano 23 marzec 2009 - 23:11

Nie zrozumiałeś mnie o co chodzi.
U mnie działało wszystko okay, last_login się uaktualniał jak trzeba. Mnie chodzi o zasadność, celowość tego pola last_login.

Według mnie last_login ma służyć to przechowania informacji o ostatnim logowaniu względem obecnego zalogowania. Albo inaczej pokazuje czas przedostatniego logowania gdy ostatnie logowanie to jest to na którym obecnie się jest zalogowanym.
Jam jest Polska, Ojczyzna Twoja, ziemia Ojców, z której wzrosłeś. Wszystko, czym jesteś, po Bogu - mnie zawdzięczasz!!

#7 thejw23

thejw23

    Senior Mastah

  • Webmastahy
  • PipPipPip
  • 824 postów

Napisano 23 marzec 2009 - 23:23

acha, takie cos. no nie wiem, wole chyba jednak zostawic jak jest i ew. kazdy wedle wlasnych potrzeb sobie to zmodyfikuje. najprosciej w compleat_login() zmienic $user->last_login z =time() na =$user->time_stamp; wtedy last login dostanie date ostatnieglo logowania, a time_stamp samo sie uaktualni na obecne logowanie. wszystko powinno dzialac ok. tylko trzeba na bazie zmienic typ last_login na datetime.

#8 jarek_bolo

jarek_bolo

    Początkujący

  • Użytkownik
  • Pip
  • 65 postów
  • Skąd:łódzkie

Napisano 23 marzec 2009 - 23:34

Nie no wiadomo. Ja tylko propozycję rzuciłem, bo semantycznie last_login znaczy dla mnie tak jak to opisałem :)
Jam jest Polska, Ojczyzna Twoja, ziemia Ojców, z której wzrosłeś. Wszystko, czym jesteś, po Bogu - mnie zawdzięczasz!!

#9 thejw23

thejw23

    Senior Mastah

  • Webmastahy
  • PipPipPip
  • 824 postów

Napisano 23 marzec 2009 - 23:36

moze i racja, ja sie jakos nad tym nie zastanawialem, tak bylo w auth kohany, wiec zostawilem :)

#10 jedre

jedre

    Młodszy Mastah

  • Użytkownik
  • PipPip
  • 464 postów
  • Skąd:Polska

Napisano 24 marzec 2009 - 00:06

Jak sama nazwa mówi "last login" czy "ostatnie logowanie". W tym przypadku "ostatnie" należy rozumieć jako "przed ostatnie". Domyślnie auth_module pokazuje tak naprawdę "ostatnie" logowanie lub jak to należało by ująć "aktualne" logowanie.

Funkcjonalność ta powinna informować kiedy miało miejsce poprzednie logowanie względem aktualnego. Dzięki temu możemy określić czy ktoś inny nie zalogował się na nasze konto. Po co nam informacja, że się przed chwilą logowaliśmy.

Kwestia interpretacji słowa "ostatnie" w tym wypadku jak najbardziej powinno to być przed ostatnie. Trochę filozofowania ;D

#11 r4zick

r4zick

    Młodszy Mastah

  • Użytkownik
  • PipPip
  • 234 postów

Napisano 24 marzec 2009 - 15:27

Nie ostatnie logowanie to ostatnie logowanie czyli aktualne.
Ta informacja nie jest dla usera tylko dla administratora.
Żeby wiedzieć kiedy użytkownik był ostatnio aktywny.

#12 jedre

jedre

    Młodszy Mastah

  • Użytkownik
  • PipPip
  • 464 postów
  • Skąd:Polska

Napisano 25 marzec 2009 - 11:54

Będę się upierał, że to kwestia interpretacji :P

#13 Maciek

Maciek

    Senior Mastah

  • Użytkownik
  • PipPipPip
  • 780 postów

Napisano 25 marzec 2009 - 14:35

Tak, to kwestia interpretacji (tego co kto potrzebuje).

Tak dla przykładu, w mBanku po zalogowaniu użytkownik widzi datę poprzedniego udanego logowania (czyli nie tego bieżącego) oraz datę ostatniej nieudanej próby logowania.

Pozdrawiam.

#14 thejw23

thejw23

    Senior Mastah

  • Webmastahy
  • PipPipPip
  • 824 postów

Napisano 29 maj 2009 - 18:36

aktualnie Simple_Auth jest w wersji 1.3
dzisiaj udostepnilem Simple_Modeler w wersji 1.5 - z nowosci jest cache. wiecej informacji tutaj

z pomoca fetch_all_cache('ident') mozna pobrac dane i nastepne wywolanie tej metody spowoduje wczytanie ich nie z bazy, ale z cache. przydatne np. jesli na kazdej podstronie wczytujemy liste kategorii, wojewodztw, najpopularniejszych ksiazek oraz np. nowosci. wszystko to sa male i szybkie zapytania, ale poza nimi jest np. 10 innych, to moze warto je wczytywac z cache, zamiast dociazac baze. pisze 'moze' bo nie wiem, nie robilem testow na sprawdzenie jaki to ma wplyw na wydajnosc. polaczenie cache z pobieraniem danych upraszcza caly proces do 1 linijki kodu. wiem, ameryki nie odkrylem, ale moze komus sie przyda gotowe rozwiazanie.

i tak generalnie rzecz ujmujac koncza mi sie troche pomysly :/ jak ktos znalazl jakis blad, ma propozycje zmian, cos mu sie nie podoba - pisac! :)

#15 nediam

nediam

    Młodszy Mastah

  • Użytkownik
  • PipPip
  • 238 postów

Napisano 01 czerwiec 2009 - 11:02

Możesz jeszcze (to tylko propozycja) dodać:

	public function as_array()
{
$data = array();
foreach ($this->data as $key => $value )
{
$aliases = array_flip($this->aliases);
if (isset($aliases[$key]))
$key = $aliases[$key];
$data[$key] = $value;
}
return $data;
}

ew bardziej optymalna wersje :)

Oraz:

	public function __isset($key)
{
if (array_key_exists($key, $this->aliases))
{
$key = $this->aliases[$key];
}
return array_key_exists($key, $this->data);
}

public function __unset($key)
{
if (array_key_exists($key, $this->aliases))
{
$key = $this->aliases[$key];
}
$this->data[$key] = NULL;
}


#16 thejw23

thejw23

    Senior Mastah

  • Webmastahy
  • PipPipPip
  • 824 postów

Napisano 01 czerwiec 2009 - 18:55

pierwsze jakos mi nie podchodzi (na razie aliasy nie byly mi nigdy potrzebne w as_array), ale druga propozycja jest dobra - pomysle jeszcze nad nimi, dzieki za uwagi :)

#17 nediam

nediam

    Młodszy Mastah

  • Użytkownik
  • PipPip
  • 238 postów

Napisano 01 czerwiec 2009 - 19:41

hm to może:

public function as_array($use_aliases = false)
{
if (!$use_aliases)
return $this->data;

$data = array();
foreach ($this->data as $key => $value )
{
$aliases = array_flip($this->aliases);
if (isset($aliases[$key]))
$key = $aliases[$key];
$data[$key] = $value;
}
return $data;
}


Co do drugiej propozycji to oczywiście w __unset oraz innych można użyć funkcji __isset

#18 mdg_sc

mdg_sc

    Początkujący

  • Użytkownik
  • Pip
  • 1 postów

Napisano 01 październik 2012 - 13:26

sory, że odkopię bardzo stary wątek...

chciałbym się Was dopytać jak najlepiej zmodyfikować simple_auth aby zapisywał w bazie czas przez jaki użytkownik był aktywny/zalogowany...

chodzi tutaj o czas spędzony na stronie przez poszczególnego użytkownika.

Pozdrawiam!




Użytkownicy przeglądający ten temat: 0

0 użytkowników, 0 gości, 0 anonimowych