Bonjour,
je réalise un formulaire de connexion avec cakephp en utilisant la sécurité du component Security mais je bloque sur un problème de redirection déjà voici comment je procède
dans mon controller App je fais ceci
<?php
namespace App\Controller;
use Cake\Controller\Controller;
use Cake\Event\Event;
class AppController extends Controller
{
/**
* Initialization hook method.
*
* Use this method to add common initialization code like loading components.
*
* e.g. `$this->loadComponent('Security');`
*
* @return void
*/
public function initialize()
{
parent::initialize();
$this->loadComponent('RequestHandler');
$this->loadComponent('Flash');
$this->loadComponent('Cookie');
$this->loadComponent('Security', ['blackHoleCallback' => 'forceSSL']);
$this->loadComponent('Auth', [
/*'authorize' => [
'Acl.Actions' => [
'actionPath' => 'controllers/'
]
],
*/ 'authorize' => ['Controller'],
'flash' => [
'element' => 'error',
'key' => 'flash',
'params' => [
'class' => 'error'
]
],
'authenticate' => [
'Form' => [
'userModel' => 'Admin.Users',
'fields' => [
'username' => 'login_user',
'password' => 'password_user'
],
'passwordHasher' => [
'className' => 'Default'
],
'contain' =>[
'Groups' => function($man){
return $man->select(['id','nom_groupe'])
->where(['Groups.active_groupe >='=>1]);
}
]
]
],
'loginAction' => [
'plugin' => false,
'controller' => 'Connexion',
'action' => 'login',
'prefixe' => false
],
'loginRedirect' => [
'controller' => 'Dashboards',
'action' => 'index',
'plugin' => 'Admin',
'prefixe' =>false
],
'unauthorizedRedirect' => [
'plugin' => false,
'controller' => 'Connexion',
'action' => 'login',
'prefixe' => false
],
'logoutRedirect' => [
'plugin' => false,
'controller' => 'Connexion',
'action' => 'login'
],
'authError' => 'Vous n\'êtes pas autorisé à cette page',
'flash' => [
'element' => 'error'
]
]);
if (env('HTTPS')) {
$this->loadComponent('Csrf', [
'secure' => true
]);
} else {
$this->loadComponent('Csrf',['secure'=>true]);
}
}
public function beforeFilter(Event $event)
{
$plateforme = 'SMSPLATEFORM';
$this->Security->blackHoleCallback = 'forceSSL';
$this->Security->config('unlockedActions',[','totalContactgroup','*']);
$this->set(compact(['plateforme']));
}
public function forceSSL(){
return $this->redirect('https://' . env('SERVER_NAME') . $this->request->here);
}
public function beforeRender(Event $event)
{
if (!array_key_exists('_serialize', $this->viewVars) &&
in_array($this->response->type(), ['application/json', 'application/xml'])
) {
$this->set('_serialize', true);
}
}
}
dans le controlloer connexion j'ai ceci:
<?php
namespace App\Controller;
use App\Controller\AppController;
use Cake\Core\Configure;
use Cake\ORM\Table;
use Cake\ORM\TableRegistry;
use Cake\Event\Event;
use Cake\Network\Exception\InvalidCsrfTokenException;
use Cake\Network\Request;
use Cake\Mailer\MailerAwareTrait;
use App\Lib\Recaptcha;
class ConnexionController extends AppController
{
use MailerAwareTrait;
public function initialize()
{
parent::initialize();
$this->loadComponent('Flash');
$this->loadComponent('RequestHandler');
}
public function isAuthorized($user)
{
if (isset($user['groupe']['nom_groupe'])) {
return true;
}
return true;
}
public function beforeRender(\Cake\Event\Event $event)
{
$this->viewBuilder()->layout('connexion');
}
public function login()
{
$comptes = TableRegistry::get('Admin.Users');
$login = $comptes->newEntity();
if($this->request->is('post'))
{
$captcha = new Recaptcha(Configure::read('Site.captchaCodeSite'),Configure::read('Site.captchaCodesecret'));
if($captcha->checkValidCode($this->request->data['g-recaptcha-response'],$this->request->env('REMOTE_ADDR')) === false)
{
$this->Flash->error(__("Le captcha est incorrect, remplissez à nouveau le formulaire"));
return $this->redirect($this->referer());
}
else
{
$user = $this->Auth->identify();
if($user)
{
$this->Auth->setUser($user);
if($user['active_compte'] == 1)
{
$viewVars= [
'name'=>$user['nom'],
'code'=>$user['token'],
'key'=>$user['key_confirm_user'],
];
$userConnect = $comptes->find()->where(['Users.id'=>$user['id'],'active_compte'=>1])->first();
$this->getMailer('User')->send('activeCompte', [$userConnect, $viewVars]);
$this->Flash->success(__("Bienvenue ". $this->Auth->user('login_user') ." Votre compte n'est pas encore activé un mail d'activation vous a été envoyé à l'adresse".$this->Auth->user('email')));
return $this->redirect($this->referer());
}
$this->Flash->success(__("Bienvenue ". $this->Auth->user('login_user') ." dans votre espace d'administration"));
return $this->redirect(['plugin'=>'Admin','controller' => 'Adsds' ,'action' => 'index']);
}
$this->Flash->error(__("Login ou mot de passe incorrect, recommencez ou contacter un administrateur"));
}
}
$this->set(compact(['login']));
}
public function logout()
{
$this->Flash->success(__("Vous avez été déconnecté "));
return $this->redirect($this->Auth->logout());
}
}
et dans le controller Dashboard j'ai ceci
<?php
namespace Admin\Controller;
use Admin\Controller\AppController;
use Cake\ORM\TableRegistry;
class DashboardsController extends AppController
{
public function beforeRender(\Cake\Event\Event $event)
{
$this->viewBuilder()->layout('template');
}
public function isAuthorized($user)
{
debug($this->request);die();
if (isset($user['group']['nom_groupe']) && in_array($user['group']['nom_groupe'], ['Client','Administrateur'])) {
return true;
}
return false;
}
public function index()
{
}
}
$etre redirigé vers la page d'administration Dashboard controller
l'orsque je me connecte avec le component security désactivé et tous ce qui va avec tous ce passe bien mais l'orsque j'active ce component et les actions de recirections je n'accède plus au controller Dashboard car tout bloque le message flash me dit que la connexion a été effective mais me renvoi toujours vers l'action login du controlleur Connexion
au lieu de me renvoyer vers le controller Dashboard