Terve.
Miten esim täällä putkassa hoidetaan uuden käyttäjän luominen.
Tein kokeilumielessä sivut, missä uuden käyttäjän käyttäjätiedot (username, password, email) lähetetään sähköpostilla minulle.
Sitten luon manuaalisesti tietokantaan uudelle käyttäjälle tunnukset.
Miten esim täällä putkassa yo. tapahtuu?
Voisiko yo. jutun jotenkin tehdä jotenkin helpommin?
Esim jos adminille lähtetetyssä sähköpostissa olisi suora linkki jollekkin admin-sivulle ja sitä klikkaamalla suoritetaan esim INSERT-lause kantaan tms.. ?
Täällä ne kai suoraan lisätään tietokantaan kun joku rekisteröityy, ja se onkin paras idea. Tai ei siinä oo mtn ideaa, jos vaikka tulee 100 rekisteröitymistä päivässä ja ne kaikki pitää adminin käydä hoitamassa.
Muistaakseni kestää jotain 1-2 päivää ennenkuin tunnus on voimassa, joten ei kai
ne suoraan mene kantaan?
En muista oliko täällä, mutta useissa sivustoissa lähetetään sitten jokin vahvistus sähköposti, mitä klikkaamalla tunnus tulee voimaan.
Miten sellainen on toteutettu?
Lisätään kantaan automaagisesti ja heitetään aktiivisuusflagi nollaan. Sittenko käyttäjä käy lukemassa emailin ja vahvistaa tunnuksen luomisen sähköpostissa olevan linkin kautta, aktiivisuusflagi heitetään kannasta ykköseksi. Siivoillaan kannasta noita aktivoimattomia tunnuksia vaikkapa samanlaisella aikavälillä kuin mitä aktiivisuuden vahvistamiseenkin vaaditaan. Frameworkeilla on kiva säätää.
<?php /** * Käyttäjän lisääminen Zend Frameworkin avulla. * Oletetaan, että kannassa on aktiivisuusflagi, jolla on DEFAULT 0. */ # AuthController (controller) public function createAction() { $form = UserTable::getRegisterationForm(); /** Existence and validity checks */ if ( $this->getRequest()->isPost() ): if ( $form->isValid( $_POST ) ): $values = $form->getValues(); Zend_Loader::loadClass( 'Zend_Config_Ini' ); $config = new Zend_Config_Ini( 'settings.ini', 'basic' ); /** Parse data */ $passSalt = uniqid( rand(), true ); $passHash = UserTable::getPassHash( $values[ 'pass' ], $passSalt ); $userData = array( 'name' => $values[ 'name' ], 'pass' => $passHash, 'email' => $values[ 'email' ], 'salt' => $passSalt ); /** Insert user to DB and clear post data */ UserTable::createNewUser( $userData ); $_POST = array(); $this->_redirect( '/' ); else: $this->view->msg = 'Erroneous input!'; endif; else: $this->view->msg = 'Forgot something!'; endif; } # UserTable (model) public static function createNewUser( $data ) { $userTable = new UserTable(); $user = $userTable->createRow( $data ); $user->save(); }
getPassHashissa
lasketaan hash
-funktiolla salakalasta joku mukava summa, mahdollisesti vielä iteroiden. Kannan rivien nimissä voi toki käyttää vielä hieman securityThroughObscurityä :).
Uuden käyttäjän voi lisätä tietokantaan näin:
INSERT INTO Kayttajat (nimi, tila) VALUES ('Matti', 0)
Tila 0 tarkoittaa, että käyttäjää ei ole vielä hyväksytty.
Todellisuudessa käyttäjästä tallennettaisiin toki muitakin tietoja (ainakin salasana).
Sitten käyttäjän voi hyväksyä ylläpitosivun kautta:
UPDATE Kayttajat SET tila = 1 WHERE nimi = 'Matti'
Tila 1 tarkoittaa, että käyttäjä on hyväksytty ja saa kirjautua sisään.
Sitten kaikkialla, missä täytyy tarkistaa käyttäjän kirjautuminen, täytyy nimen ja salasanan ohella tarkistaa, että käyttäjän tila on oikea.
Oookkei.
Kiitoksia vastauksista.
Aihe on jo aika vanha, joten et voi enää vastata siihen.