Přepínání uživatelů pro testovací účely
- Croc
- Člen | 270
Zdravím,
pro testovací účely potřebuji udělat přepínaní uživatelů, na kterého
jsem přihlášen. Představoval bych si to takto:
- Kliknu na odkaz přepnout uživatele s parametrem jeho ID
- Systém mě přihlásí (hesla nepotřebuji vůbec řešit)
- Jsem přihlášen a funguji jako daný uživatel
Něco jsem se pokoušel vymyslet ale nevím jak to uchopit. Neřešil někdo něco podobného?
Díky moc
EDIT:
Upravil jsem si metodu authenticate:
/**
* @param array $credentials
* @return Nette\Security\Identity
* @throws Nette\Security\AuthenticationException
*/
public function authenticate(array $credentials)
{
list($id_user) = $credentials;
$row = $this->database->table(self::TABLE_NAME)->where(self::COLUMN_ID, $id_user)->fetch();
$arr = $row->toArray();
return new Nette\Security\Identity($row[self::COLUMN_ID], NULL, $arr);
}
a následně v akci v presenteru volám:
$this->user->login($id);
ale dostanu následující chybu:
Request exceeded the limit of 10 internal redirects due to probable configuration error. Use 'LimitInternalRecursion' to increase the limit if necessary. Use 'LogLevel debug' to get a backtrace., referer: http://localhost/
Editoval Croc (15. 9. 2016 10:37)
- jiri.pudil
- Nette Blogger | 1029
Do Nette\Security\User::login()
můžeš místo credentials
poslat celou identitu, pak s ní budeš rovnou přihlášený
- Jiří Nápravník
- Člen | 710
Řešil a byl jsem překvapen, že to není nic složitého. Stačí si vytáhnout z databáze podle id toho člověka a pak v presenteru:
$this->getUser()->login($user); //v user je identita
A jsi přihlášen na toho nového.
Editoval Jiří Nápravník (15. 9. 2016 10:42)
- Croc
- Člen | 270
Stále mi to nejde :(
v presenteru kde volám akci na přeputí uživatele mám toto:
public function actionSwitch($id)
{
$identity = $this->userManager->getUserData($id);
$this->user->login($identity);
}
//metoda getUserData() vypadá takto:
public function getUserData($id_user) {
return $this->database->table(self::TABLE_NAME)
->where(self::COLUMN_ID, $id_user)->fetch();
}
//dostávám následující chybu:
Request exceeded the limit of 10 internal redirects due to probable configuration error. Use 'LimitInternalRecursion' to increase the limit if necessary. Use 'LogLevel debug' to get a backtrace., referer: http://localhost/
V DB nemám sloupec pro heslo.
Editoval Croc (15. 9. 2016 10:54)
- Croc
- Člen | 270
Blbnu…Nicméně mi to pořád hází stejnou chybu… Mám to teď takhle:
public function actionSwitch($id)
{
$row = $this->userManager->getUserData($id)->fetch();
$arr = $row->toArray();
$identity = new Nette\Security\Identity($id, NULL, $arr);
$this->getUser()->login($identity);
$this->getPresenter()->redirect("Homepage:default");
}
Nemůže být problém někde jinde??
- Pavel Kravčík
- Člen | 1195
Hádám, že chyba bude někde, kde je redirect na stránku s přihlášením, který se zasekne ve smyčce, protože je špatně napsaná. Login vypadá ok.
- Croc
- Člen | 270
Něco zatím zkouším, takže ano, statické HTML.
Jedná se prakticky o čistý sandbox nette 2.3.
Vůbec nefunguje routování, když zadám adresu která ani neexistuje, hodí to stejnou chybu…
Apache/2.4.18 (Ubuntu)
PHP 7.0.10–2+deb.sury.org~xenial+1
Nette 2.3.x (poslední 2.3)
Editoval Croc (15. 9. 2016 12:01)
- Croc
- Člen | 270
No úvodní obrazovka sandboxu se mi zobrazila :) tak jsem předpokládal že je to OK :P
Takhle to dopadá když člověk dělá něco jednou za X měsíců… Server je nastavený předpokládám dobře, jedna větší aplikace mi tam běží v poho. Takže to bude něco jen v této.
.htaccess
# Apache configuration file (see httpd.apache.org/docs/current/mod/quickreference.html)
# disable directory listing
<IfModule mod_autoindex.c>
Options -Indexes
</IfModule>
# enable cool URL
<IfModule mod_rewrite.c>
RewriteEngine On
# RewriteBase /
# prevents files starting with dot to be viewed by browser
RewriteRule /\.|^\. - [F]
# front controller
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule !\.(pdf|js|ico|gif|jpg|png|css|rar|zip|tar\.gz|map)$ index.php [L]
</IfModule>
# enable gzip compression
<IfModule mod_deflate.c>
<IfModule mod_filter.c>
AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css application/x-javascript text/javascript application/javascript application/json
</IfModule>
</IfModule>
- Croc
- Člen | 270
Právě to procházím. Nastavení mám takto:
<VirtualHost localhost:80>
ServerName localhost
ServerAdmin webmaster@localhost
DocumentRoot /var/www
<Directory /var/www>
Options Indexes FollowSymLinks Includes ExecCGI
AllowOverride All
Require all granted
Allow from all
</Directory>
Alias /project1 "/var/www/project1/www"
Alias /project2 "/var/www/project2/www/www"
Alias /project3 "/var/www/project3/www"
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
- Croc
- Člen | 270
Opraveno. Jsem ale blb. Zapomněl jsem v .htaccess doplnit toto:
# Apache configuration file (see httpd.apache.org/docs/current/mod/quickreference.html)
# disable directory listing
<IfModule mod_autoindex.c>
Options -Indexes
</IfModule>
# enable cool URL
<IfModule mod_rewrite.c>
RewriteEngine On
// chybělo:
RewriteBase /project3/
RewriteRule ^www/(.*)$ /project3/$1
//-----------
# prevents files starting with dot to be viewed by browser
RewriteRule /\.|^\. - [F]
# front controller
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule !\.(pdf|js|ico|gif|jpg|png|css|rar|zip|tar\.gz|map)$ index.php [L]
</IfModule>
# enable gzip compression
<IfModule mod_deflate.c>
<IfModule mod_filter.c>
AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css application/x-javascript text/javascript application/javascript application/json
</IfModule>
</IfModule>