Přihlašovací formulář funkční pouze přes {control signInForm} a ne přes {input …}
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- Desttro
- Člen | 126
Zdravím,
narazil jsem na jeden problém, a nechápu proč to dělá. Mám přihlašovací
formulář. Když do latte šablony vložím {control singInForm} tak vše
funguje bez problémů.
Jakmile ho chci ale trošku nastylovat, tak použiju místo controlu
tento kód:
{form signInForm}
<form role="form">
<fieldset>
<div class="form-group">
{input username}
</div>
<div class="form-group">
{input password}
</div>
<div class="checkbox">
<label>
{input remember}
</label>
</div>
{input send}
</fieldset>
</form>
{/form}
Reloadnu přihlašovací stránku – formulář hned vypadá lépe, ale přestane fungovat. Vypisuje třeba, že chybí napsat heslo, nebo mail, ale už nenapíše, že je špatný mail či heslo. A už vůbec mne nepřihlásí.
Čím to je? Děkuji.
zde je SignPresenter.php:
namespace AdminModule;
use Nette,
App\Model;
use \Nette\Application\UI;
/**
* Sign in/out presenters.
*/
class SignPresenter extends BasePresenter
{
/** @var \Nette\Database\Context */
private $database;
public function __construct(\Nette\Database\Context $database)
{
$this->database = $database;
}
/**
* Sign-in form factory.
* @return \Nette\Application\UI\Form
*/
protected function createComponentSignInForm()
{
$form = new \Nette\Application\UI\Form;
$form->addText('username', '')
->setRequired('Prosím vložtě e-mail')
->setType('email')
->setAttribute('class', 'form-control')
->setAttribute('placeholder', 'E-mail')
->setAttribute('autofocus');
$form->addPassword('password', '')
->setRequired('Prosím vložte heslo')
->setType('password')
->setAttribute('class', 'form-control')
->setAttribute('placeholder', 'Heslo')
->setAttribute('autofocus');
$form->addCheckbox('remember', 'Zapamatovat');
$form->addSubmit('send', 'Přihlásit se')
->setAttribute('class', 'btn btn-lg btn-success btn-block');
// call method signInFormSucceeded() on success
$form->onSuccess[] = $this->signInFormSucceeded;
return $form;
}
public function signInFormSucceeded($form, $values)
{
if ($values->remember) {
$this->getUser()->setExpiration('14 days', FALSE);
} else {
$this->getUser()->setExpiration('20 minutes', TRUE);
}
try {
$this->getUser()->login($values->username, $values->password);
$this->redirect('Tour:');
} catch (\Nette\Security\AuthenticationException $e) {
$form->addError($e->getMessage());
}
}
public function actionDefault() {
$this->redirect('Sign:in');
}
public function actionOut()
{
$this->getUser()->logout();
$this->flashMessage('Byl jste odhlášen/a');
$this->redirect('Sign:in');
}
}
UserManager:
namespace App\Model;
use Nette,
Nette\Utils\Strings,
Nette\Security\Passwords;
/**
* Users management.
*/
class UserManager extends Nette\Object implements Nette\Security\IAuthenticator
{
const
TABLE_NAME = 'account',
COLUMN_ID = 'id',
COLUMN_NAME = 'email',
COLUMN_PASSWORD_HASH = 'password',
COLUMN_ROLE = 'role';
/** @var Nette\Database\Context */
private $database;
public function __construct(Nette\Database\Context $database)
{
$this->database = $database;
}
/**
* Performs an authentication.
* @return Nette\Security\Identity
* @throws Nette\Security\AuthenticationException
*/
public function authenticate(array $credentials)
{
list($username, $password) = $credentials;
$row = $this->database->table(self::TABLE_NAME)->where(self::COLUMN_NAME, $username)->fetch();
if (!$row) {
throw new Nette\Security\AuthenticationException('Uživatelské jméno není správné.', self::IDENTITY_NOT_FOUND);
} elseif (!Passwords::verify($password, $row[self::COLUMN_PASSWORD_HASH])) {
throw new Nette\Security\AuthenticationException('Heslo není správné.', self::INVALID_CREDENTIAL);
} elseif (Passwords::needsRehash($row[self::COLUMN_PASSWORD_HASH])) {
$row->update(array(
self::COLUMN_PASSWORD_HASH => Passwords::hash($password),
));
}
$arr = $row->toArray();
unset($arr[self::COLUMN_PASSWORD_HASH]);
return new Nette\Security\Identity($row[self::COLUMN_ID], $row[self::COLUMN_ROLE], $arr);
}
/**
* Adds new user.
* @param string
* @param string
* @return void
*/
public function add($username, $password)
{
$this->database->table(self::TABLE_NAME)->insert(array(
self::COLUMN_NAME => $username,
self::COLUMN_PASSWORD_HASH => Passwords::hash($password),
));
}
}
- David Matějka
- Moderator | 6445
nedavej tam ten vnitrni tag <form>, nette ho vykresluje samo (tim makrem {form})