Problémy s autentizaci (Cannot regenerate session ID)
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- o.x.i
- Člen | 7
Cao,
už několik hodin se snažím rozchodit jednoduché přihlašování
uživatelů a nemůžu se dostat přes tuto chybu:
InvalidStateException
Cannot regenerate session ID after HTTP headers have been sent (output started at C:\XAMPP\xampplite\htdocs\semestralka\app\models\Users.php:28).
procetl jsem si dokumentaci na autentizaci, tutorial na zdrojaku a na konec jsem použil i stejný kod, co je v Akrabatu a porad ta sama chyba…uz nevim, co s tim, tak bych byl moc rad, za kazdou radu..diky moc
p.s. temp mažu pravidelne, a pouzivam verzi 0.9.6
LoginPresenter
<?php
class LoginPresenter extends BasePresenter
{
protected function createComponentLoginForm()
{
$form = new NAppForm;
$form->addText('username', 'Username:')
->addRule(NForm::FILLED, 'Please provide a username.');
$form->addPassword('password', 'Password:')
->addRule(NForm::FILLED, 'Please provide a password.');
$form->addCheckbox('remember', 'Remember me on this computer');
$form->addSubmit('login', 'Login');
$form->onSubmit[] = callback($this, 'loginFormSubmitted');
return $form;
}
public function loginFormSubmitted($form)
{
try {
$user = $this->getUser();
$user->login($form['username']->getValue(), $form['password']->getValue());
$this->getApplication()->restoreRequest($this->backlink);
$this->redirect('Dashboard:');
} catch (AuthenticationException $e) {
$form->addError($e->getMessage());
}
}
}
?>
basepresenter
<?php
abstract class BasePresenter extends NPresenter
{
public $oldLayoutMode = FALSE;
public function beforeRender()
{
$this->getSession()->start();
$user = $this->getUser();
$this->template->user = $user->isLoggedIn() ? $user->getIdentity() : NULL;
}
?>
Users.php
<?php
class Users extends NObject implements IAuthenticator
{
public function authenticate(array $credentials)
{
$username = strtolower($credentials[self::USERNAME]);
$password = sha1($credentials[self::PASSWORD].$username);
$row = dibi::select('*')->from('users')->where('email=%s', $username)->fetch();
if (!$row) {
throw new AuthenticationException("User '$username' not found.", self::IDENTITY_NOT_FOUND);
}
if ($row->password !== $password) {
throw new AuthenticationException("Invalid password.", self::INVALID_CREDENTIAL);
}
unset($row->password);
return new NIdentity($row->username, NULL, $row);
}
}
?>