Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Uuden käyttäjän luominen

javerkki [12.04.2008 16:54:17]

#

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.. ?

Short Php [12.04.2008 16:57:40]

#

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.

javerkki [12.04.2008 17:18:55]

#

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?

tsuriga [12.04.2008 17:20:27]

#

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ä :).

Antti Laaksonen [13.04.2008 12:20:28]

#

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.

javerkki [13.04.2008 19:23:40]

#

Oookkei.

Kiitoksia vastauksista.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta