Nette 3.1 – Nefunguje mne přihlášení na hostingu?
- Karel Chramosil
- Člen | 105
Dobrý den,
prosím o radu: Nette 3.1 – Nefunguje mne přihlášení na hostingu? Na lokálu s databází hostingu vše funguje. Trace nehlásí chybu. Převádím projekt z nette 2.4 na 3.1. Mohl by mne někdo poslat správný kód pro přihlášení?
Děkuji
Model:
MyAuthenticator.php
<?php
/**
* Users authenticator.
*
* @package Opravy
*/
namespace App\Model;
use Nette;
use Nette\Security\SimpleIdentity;
class MyAuthenticator implements Nette\Security\Authenticator
{
private $database;
private $passwords;
public function __construct(
Nette\Database\Explorer $database,
Nette\Security\Passwords $passwords
) {
$this->database = $database;
$this->passwords = $passwords;
}
public function authenticate(string $username, string $password):SimpleIdentity
{
$row = $this->database->table('user')
->where('username', $username)
->fetch();
if (!$row) {
//throw new Nette\Security\AuthenticationException('User not found.');
return new SimpleIdentity( 0 );
}
/*
$this->$password = hash('sha512', $row->password); // Zahashuje heslo
//Mevím proč nefunguje, asi souvisí s Hashováním hesel
if (!$this->passwords->verify($this->$password, $row->password)) {
throw new Nette\Security\AuthenticationException('Invalid password.');
}
*/
//return new SimpleIdentity(
if ($row) {
return new SimpleIdentity(
$row->id,
$row->role, // nebo pole více rolí
['password' => $row->password],
['name' => $row->username]
/*,
['jmeno' => $row->jmeno],
['prijmeni' => $row->prijmeni]
*/
);
} else {
return new SimpleIdentity(0);
}
}
}
services:
services:
- App\Router\RouterFactory::createRouter
- App\Model\MyAuthenticator
- App\Model\Users
security.passwords: Nette\Security\Passwords(::PASSWORD_BCRYPT, [cost: 12])
Pressenter:
<?php
namespace App\Presenters;
use App\Model\MyAuthenticator;
use Nette;
use Nette\Application\UI\Form;
final class SignPresenter extends BasePresenter
{
/**
* Sign-in form factory.
*/
protected function createComponentSignInForm(): Form
{
$form = new Form();
$form->addText('username', 'Uživatelské jméno:', 30, 50)
->setRequired('Zadejte prosím uživatelské jméno.');
$form->addPassword('password', 'Heslo:', 30)
->setRequired('Zadejte prosím heslo.');
$form->addCheckbox('persistent', 'Pamatovat si mě na tomto počítači');
$form->addSubmit('login', 'Přihlásit se');
$form->onSuccess[] = [$this, 'signInFormSubmitted'];
return $form;
}
public function signInFormSubmitted(Form $form)
{
try {
$user = $this->getUser();
$values = $form->getValues();
$user_name = $values->username;
$password = $values->password;
$password = hash('sha512', $password);; // Zahashuje heslo
$user->setExpiration('30 minutes');
$user->login($user_name, $password);
if($user->getIdentity()->password == $password){
$this->flashMessage( 'Přihlášení bylo úspěšné.', 'success');
} else {
$user->logout();
$this->flashMessage( 'Přihlášení bylo neúspěšné.', 'success');
}
// Pro hodnotu 1 v proměné zakazan je uživatel zakázán.
if($user->getIdentity()->zakazan == true) {
$this->actionOut();
} else {
$this->redirect('Homepage:');
}
} catch (NS\AuthenticationException $e) {
$form->flashMessage('Neplatné uživatelské jméno nebo heslo.');
}
}
public function actionOut()
{
$this->getUser()->logout();
$this->flashMessage('Uživatel je zakázán.');
$this->redirect('in');
}
}
- Karel Chramosil
- Člen | 105
Omlouvám se, problém vyřešen. Prohlížeč chrome vyhonotil, že stránky
nejsou zabezpečené a bez jakéhokoliv hlášení blokoval funkčnost.
(přihlásil jsem se přes mobil bez problémů)
Karel Chramosil