Nette Framework Login → chyba

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Vít Prokop
Člen | 8
+
0
-

Zdravím, používám verzi Nette Framework 2.0 Beta pro PHP 5.3.

Mám problém s loginem, nejspíš jsem příklad na stránce dobře nepochopil nebo nevím, co ale žádám Vás zkušené o radu.

Kód je zde:

<?php

require_once('../fce.php');
require_once('../dibi/dibi.php');
require('../Nette/loader.php');
require_once('../cfg.php');
use Nette\Diagnostics\Debugger;

Debugger::$strictMode = TRUE;
Debugger::enable();

use Nette\Http\User;

dibi::connect(array(
    'driver'   => 'mysql',
    'host'     => "$ip",
    'username' => "$name",
    'password' => "$pass",
    'database' => "$dbserver",
    'charset'  => 'utf8',
));
$configurator = new Nette\Configurator;
$fce = new Fce();

$container = $configurator->container;
$user = $container->user;
if(isset($_POST['submit'])) {
    if($user->isLoggedIn()) {

      echo "<script language='JavaScript' text='text/javascript'>;
                window.location.href='index.php'; </script>";
    }else{
        dibi::connect(array(
            'driver' => 'mysql',
            'host' => "$ip",
            'username' => "$name",
            'password' => "$pass",
            'database' => "$dbserver",
            'charset' => 'utf8',
        ));

        $username = $_POST['username'];
        $password = $_POST['password'];
            $password = $fce->sha_password($username, $password);

              $user->login($username,$password);

                 $result = dibi::query("SELECT * FROM `user` WHERE username=%s", $username);

        if(count($result) != 1)
            die("Neplatné uživatelské jméno.");

        foreach($result as $n => $row) {

            $selected_password = $row['sha_pass_hash'];

        $authenticator = new Nette\Security\SimpleAuthenticator(array(
        "$username" => "$selected_password"
         ));

             $user->setAuthenticator($authenticator);
try {
    // pokusíme se přihlásit uživatele...
    $user->login($username, $password);
    // ...a v případě úspěchu presměrujeme na další stránku
    $user->redirect('index.php');
    $user->setExpiration(0, TRUE);
} catch (Exception $e){
  Debug::log($e);
    $error = '<div id="error">Špatné <span class="error">HESLO</span></div>';
}



                unset($result);
                die();

        }
    }
}
?>

Error.log:

[2011–07–14 15–51–37] PHP Fatal error: Uncaught exception Nette\DI\MissingServiceException with message ‚Service 'authenticator‘ not found.' in /data/web/virtuals/4676/virtual/www/subdom/movie/Nette/DI/Container.php:147 @ http://movie.anthelion.eu/…n/admini.php @@ exception 2011–07–14 15–51–37 7632d6d750e5e171eacc57927ec208da.html
[2011–07–14 16–50–44] PHP Fatal error: Uncaught exception Nette\DI\MissingServiceException with message ‚Service 'authenticator‘ not found.' in /data/web/virtuals/4676/virtual/www/subdom/movie/Nette/DI/Container.php:147 @ http://movie.anthelion.eu/…n/admini.php @@ exception 2011–07–14 16–50–44 659dd5c7170d8a9cfdd3b6975c71fa51.html

Děkuji mnohokrát za jakoukoliv odpověď.
S pozdravem Vít Prokop.

Editoval Vít Prokop (14. 7. 2011 17:36)

Filip Procházka
Moderator | 4668
+
0
-

Ahoj Vítku, to opravdu programuješ v Nette takto? Copak jsi nepochytil nic o MVC? :)

  • stáhni si sandbox a začni znovu
  • udělej si presenter
  • v něm formulář
  • k němu v presenteru handler, co uživatele přihlásí
  • vykresli v šabloně formulář
Jan Voráček
Člen | 90
+
0
-

Vzor přihlašování je dokonce přímo v sandboxu. Zaměř se na soubory:

  • config.neon – zde je nastavená třída, která bude provádět ověření (authenticator),
  • models\UsersModel.php – implementuje IAuthenticator, metoda authenticate vyhodnocuje validitu přihlašovacích údajů,
  • presenters\SignPresenter.php – zde je vytvořen přihlašovací formulář a metoda zavolaná po odeslání formuláře,
  • templates\Sign\in.latte – zde je vložen formulář do šablony {control signInForm}.

Editoval Jan Voráček (14. 7. 2011 18:05)

Vít Prokop
Člen | 8
+
0
-

Mnohokrát Vám děkuji.

To: HosipLan
Nevím zda-li tomu co píšu vůbec říkat programování, je to spíš pokus omyl.

Filip Procházka
Moderator | 4668
+
0
-

To nevadí, důležitá je snaha ;) Nastuduj si novou dokumentaci, než začneš tvořit další pokusy :) https://doc.nette.org

Vít Prokop
Člen | 8
+
0
-

Stejně z toho co jste mi řekli nevím nic, neboť prostě nevím jak to postavit ten kód/kódy…

Filip Procházka
Moderator | 4668
+
0
-

A máš nastudovanou dokumentaci?

Vít Prokop
Člen | 8
+
0
-

Bohužel né celou, zaměřil jsem se na MVC Aplikace a Presentery.