Uvodna prihlasovacia stranka

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
cujan
Člen | 410
+
0
-

Caute, mam projekt v ktorom potrebujem pouzit prihlasovanie…
Celu sablonu mam zadefinovanu v @layout.latte...do ktorej ncludujem potom dalsie sablony a potreboval by som pred tuto sablonu vsunut prihlasovaciu stranku…to znamena, ak clovek pride na stranku, nech mu nabehne najpr prihlasenie…

ide to nejako?

Danny
Člen | 146
+
0
-

Já jsem to vyřešil tak že pro mojí přihlašovací šablonu in.latte jsem si vytvořil @login_layout.latte kde jsem si nadefinoval vzhled a pak pouze v in.latte jsem místo {block content}{/block} přidal {layout '@login_layout.latte'}

Je to to, co potřebuješ?

cujan
Člen | 410
+
0
-

Danny napsal(a):

Já jsem to vyřešil tak že pro mojí přihlašovací šablonu in.latte jsem si vytvořil @login_layout.latte kde jsem si nadefinoval vzhled a pak pouze v in.latte jsem místo {block content}{/block} přidal {layout '@login_layout.latte'}

Je to to, co potřebuješ?

oki, ale default routing mas upraveny ako? aby ako prva stranka sa ti natiahla @login_layout.latte?

Danny
Člen | 146
+
0
-

Mám v presenterech nastavené přesměrování uživatele pokud není přihlášený viz

if(!$this->getUser()->isLoggedIn())
{
 $this->redirect("Sign:in");
}
cujan
Člen | 410
+
0
-

uz mi to presmerovava na @login_layout.latte
len neviem co ma dat do @login_layout.latte, lebo zatial nevidim prihlasovaci form z in.latte…

Danny
Člen | 146
+
0
-

@login_layout.latte

<!DOCTYPE html>
<html lang="en">
<head>
</head>

<body>

  <div id="login-page" class="row">
    <div class="col s12 z-depth-6 card-panel">

    {block content}
    {/block}
    </div>
  </div>
</body>

</html>

@in.latte

{layout '@login_layout.latte'}

{block title}Přihlášení{/block}
{form login}

{block content}
{/block}

Něco jako takhle?

cujan
Člen | 410
+
0
-

Danny napsal(a):

@login_layout.latte

<!DOCTYPE html>
<html lang="en">
<head>
</head>

<body>

  <div id="login-page" class="row">
    <div class="col s12 z-depth-6 card-panel">

    {block content}
    {/block}
    </div>
  </div>
</body>

</html>

@in.latte

{layout '@login_layout.latte'}

{block title}Přihlášení{/block}
{form login}

{block content}
{/block}

Něco jako takhle?

ano len mi to nefunguje, je dolezite, ze in.latte zacina @ ?

cujan
Člen | 410
+
0
-

cujan napsal(a):

Danny napsal(a):

@login_layout.latte

<!DOCTYPE html>
<html lang="en">
<head>
</head>

<body>

  <div id="login-page" class="row">
    <div class="col s12 z-depth-6 card-panel">

    {block content}
    {/block}
    </div>
  </div>
</body>

</html>

@in.latte

{layout '@login_layout.latte'}

{block title}Přihlášení{/block}
{form login}

{block content}
{/block}

Něco jako takhle?

ano len mi to nefunguje, je dolezite, ze in.latte zacina @ ?
u mna to mam tak
@login_layout.latte

<?php
<!DOCTYPE html>
<html lang="en">
<head>
</head>

<body>

  <div id="login-page" class="row">
    <div class="col s12 z-depth-6 card-panel">

    {block content}
    {/block}
    </div>
  </div>
</body>

</html>
?>

in.latte

<?php
{layout '@login_layout.latte'}

<h1 n:block=title>Sign in</h1>

{control signInForm}


{block content}

?>

Editoval cujan (14. 4. 2016 12:20)

cujan
Člen | 410
+
0
-

uz to ide
posunul som {block content} nad h1 n:block=title>Sign in</h1>

cujan
Člen | 410
+
0
-

super funguje to krasne, len mam kus problem, s prihlasenim…meno heslo sedi aj s db, a dostavam hlasku vkuse
The username or password you entered is incorrect.

a pritom ak si v UserManager.php dumpnem credentials
dump($credentials);

tak mi krasne meno aj heslo vypise…
je pravda, ze ked som vkladal manualne usera do db tak som mu nechal vygenerovat hash heslo cez web, ale v credentials mi ho prelozi normalne…

David Matějka
Moderator | 6445
+
0
-

Co pouzivas za hashovaci metodu u hesla (ukaz authenticator)? mas dostatecne velky sloupecek?

cujan
Člen | 410
+
0
-

pouzivam vstavany z sanboxu

tu je moj UserManager.php – su tam aj tie majo dumpy

<?php


namespace App\Model;

use Nette;
use Nette\Security\Passwords;


/**
 * Users management.
 */
class UserManager extends Nette\Object implements Nette\Security\IAuthenticator
{
	const
		TABLE_NAME = 'users',
		COLUMN_ID = 'id',
		COLUMN_NAME = 'username',
		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;
                dump($credentials);
                dump($username);
                dump($password);
		$row = $this->database->table(self::TABLE_NAME)->where(self::COLUMN_NAME, $username)->fetch();

		if (!$row) {
			throw new Nette\Security\AuthenticationException('The username is incorrect.', self::IDENTITY_NOT_FOUND);

		} elseif (!Passwords::verify($password, $row[self::COLUMN_PASSWORD_HASH])) {
			throw new Nette\Security\AuthenticationException('The password is incorrect.', 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)
	{
		try {
			$this->database->table(self::TABLE_NAME)->insert(array(
				self::COLUMN_NAME => $username,
				self::COLUMN_PASSWORD_HASH => Passwords::hash($password),
			));
		} catch (Nette\Database\UniqueConstraintViolationException $e) {
			throw new DuplicateNameException;
		}
	}

}



class DuplicateNameException extends \Exception
{}

?>
David Matějka
Moderator | 6445
+
0
-

A jak vypada to heslo v databazi?

cujan
Člen | 410
+
0
-

heslo je admin a v db vyzera takto
21232f297a57a5a743894a0e4a801fc3

cujan
Člen | 410
+
0
-

cujan napsal(a):

heslo je admin a v db vyzera takto
21232f297a57a5a743894a0e4a801fc3

sice neviem ci nie je problem v tom, ze som to dal v MD5…

David Matějka
Moderator | 6445
+
0
-

ano, v tom je problem. Nette pouziva bcrypt, zahashovat to muzes treba touhle metodou: https://api.nette.org/…sswords.html#…

cujan
Člen | 410
+
0
-

David Matějka napsal(a):

ano, v tom je problem. Nette pouziva bcrypt, zahashovat to muzes treba touhle metodou: https://api.nette.org/…sswords.html#…

kedze nemam form na vkladanie udajov o users, tak som pouzil tuto stranku na vygenerovanie bcrypt

https://www.bcrypt-generator.com/

nastavil som hodnoty na admin , heslo vygenerovalo…ael neprihlasilo ma zatial…

dikes

Editoval cujan (14. 4. 2016 13:35)

David Matějka
Moderator | 6445
+
0
-

nette pouziva 2y verzi, tvou poslany server generuje starou 2a verzi.

Formular na to nepotrebuje, proste si dumpni tu hodnotu

anebo pouzij treba 3v4l https://3v4l.org/hLp91

Jan Endel
Člen | 1016
+
0
-

Jinak dej pozor, heslo z Password se neověřuje tak, že uděláš něco jako:

if (Passwords::hash('vstup_od_uzivatele') === $userFromDb->getPassword())

ale

if (Passwords::verify('vstup_od_uzivatele', $userFromDb->getPassword())
cujan
Člen | 410
+
0
-

David Matějka napsal(a):

nette pouziva 2y verzi, tvou poslany server generuje starou 2a verzi.

Formular na to nepotrebuje, proste si dumpni tu hodnotu

anebo pouzij treba 3v4l https://3v4l.org/hLp91

oki pouzil som 3v4l
a po zadani admin, ktory output mam pouzit?

Vdaka

David Matějka
Moderator | 6445
+
0
-

to je jedno, akorat to generuje hashe s jinym saltem

cujan
Člen | 410
+
0
-

oki vdaka za rady funguje to…

cujan
Člen | 410
+
0
-

este predsa jedna vec, po prihlaseni dostavam chybu

Possible problem: you are sending a HTTP header while already having some data in output buffer. Try Tracy\OutputDebugger or start session earlier.