Nette 3.1 – Nefunguje mne přihlášení na hostingu?

Karel Chramosil
Člen | 105
+
0
-

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');
	}

}

David Grudl
Nette Core | 8111
+
+1
-

Na hashování hesel se používá $this->passwords->hash($password).

Karel Chramosil
Člen | 105
+
0
-

Děkuji za odpověď, ale problém je jiný zadám nový dotaz.

Karel Chramosil
Člen | 105
+
0
-

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