Nette Framework Login → chyba
- Vít Prokop
- Člen | 8
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
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
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
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
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
Stejně z toho co jste mi řekli nevím nic, neboť prostě nevím jak to postavit ten kód/kódy…