invalid data source name při rozdělování aplikace

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

Ahoj,
rozdělil jsem si aplikaci na FrontModule a na AdminModule ale najednou mi nefunguje přihlašování a píše mi to chybu invalid data source namea to v UserManager.php a to na řádku

$row = $this->database->table(self::TABLE_NAME)->where(self::COLUMN_NAME, $username)->fetch();

čtu fóra ale nemůžu nic najít

UserManager.php

<?php

namespace Model;

use Nette,
	Nette\Utils\Strings;


/**
 * Users management.
 */
class UserManager extends Nette\Object implements Nette\Security\IAuthenticator
{
	const
		TABLE_NAME = 'users',
		COLUMN_ID = 'id',
		COLUMN_NAME = 'username',
		COLUMN_PASSWORD = 'password',
		COLUMN_ROLE  = 'role',
		PASSWORD_MAX_LENGTH = 4096;


	/** @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('The username is incorrect.', self::IDENTITY_NOT_FOUND);

		} elseif (!self::verifyPassword($password, $row[self::COLUMN_PASSWORD])) {
			throw new Nette\Security\AuthenticationException('The password is incorrect.', self::INVALID_CREDENTIAL);

		} elseif (PHP_VERSION_ID >= 50307 && substr($row[self::COLUMN_PASSWORD], 0, 3) === '$2a') {
			$row->update(array(
				self::COLUMN_PASSWORD => self::hashPassword($password),
			));
		}

		$arr = $row->toArray();
		unset($arr[self::COLUMN_PASSWORD]);
		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 => self::hashPassword($password),
		));
	}


	/**
	 * Computes salted password hash.
	 * @param  string
	 * @return string
	 */
	public static function hashPassword($password, $options = NULL)
	{
		if ($password === Strings::upper($password)) { // perhaps caps lock is on
			$password = Strings::lower($password);
		}
		$password = substr($password, 0, self::PASSWORD_MAX_LENGTH);
		$options = $options ?: implode('$', array(
			'algo' => PHP_VERSION_ID < 50307 ? '$2a' : '$2y', // blowfish
			'cost' => '07',
			'salt' => Strings::random(22),
		));
		return crypt($password, $options);
	}


	/**
	 * Verifies that a password matches a hash.
	 * @return bool
	 */
	public static function verifyPassword($password, $hash)
	{
		return self::hashPassword($password, $hash) === $hash
			|| (PHP_VERSION_ID >= 50307 && substr($hash, 0, 3) === '$2a' && self::hashPassword($password, $tmp = '$2x' . substr($hash, 3)) === $tmp);
	}

}

config.neon

#
# SECURITY WARNING: it is CRITICAL that this file & directory are NOT accessible directly via a web browser!
#
# If you don't protect this directory from direct web access, anybody will be able to see your passwords.
# https://nette.org/en/security-warning
#
parameters:

php:
	date.timezone: Europe/Prague
	# zlib.output_compression: yes

nette:
	application:
		errorPresenter: Error
		mapping:
			*: *Module\*Presenter

	session:
		expiration: 14 days

	database:
		dsn: "host=localhost;dbname=test"
		user: root
		password: root
		options:
			profiler: true
			run: true
			lazy: true

services:
	- Model\UserManager
	- App\RouterFactory
	router: @App\RouterFactory::createRouter

Díky za radu ;)

kasparek
Člen | 43
+
0
-

Tak nyní jsem přišel na to že mi neproběhne žádný dotaz do db ale vůbec nechápu proč??
nemohlo by to být tím jak jsem si přepsal RouterFactory.php???

<?php

namespace App;

use Nette,
	Nette\Application\Routers\RouteList,
	Nette\Application\Routers\Route,
	Nette\Application\Routers\SimpleRouter;


/**
 * Router factory.
 */
class RouterFactory
{

	/**
	 * @return \Nette\Application\IRouter
	 */
	public function createRouter()
	{
		$router = new RouteList();

		$router[] = new Route('<presenter>/<action>', array(
			'module' => 'Front',
			'presenter' => 'Homepage',
			'action' => 'default',
		));

		$router[] = new Route('admin/<presenter>/<action>', array(
			'module' => 'Admin',
			'presenter' => 'Homepage',
			'action' => 'default',
		));

		return $router;
	}

}
David Matějka
Moderator | 6445
+
0
-

Muzes sem hodit celou ladenku? (rozklikavaci)

kasparek
Člen | 43
+
0
-

matej21 napsal(a):

Muzes sem hodit celou ladenku? (rozklikavaci)

Jak ji sem mám dát??

David Matějka
Moderator | 6445
+
0
-

Uloz html a nekam to nahraj

kasparek
Člen | 43
+
0
-

matej21 napsal(a):

Uloz html a nekam to nahraj

http://www.uschovna.cz/…CC2LNCW-7DM/

Editoval kasparek (27. 5. 2014 17:51)

David Matějka
Moderator | 6445
+
0
-

uz to vidim. V configu ti v DSN chybi typ databaze (to mysql: pred host)

dsn: "mysql:host=localhost;dbname=test"
kasparek
Člen | 43
+
0
-

matej21 napsal(a):

uz to vidim. V configu ti v DSN chybi typ databaze (to mysql: pred host)

dsn: "mysql:host=localhost;dbname=test"

super moc díky ale jakto že mi to předtím fungovalo než jsem rozděloval ten web i když teď je to jedno ;)