Bonjour à tous.
Sur cakephp 3.0, j'essaie d'intégrer l'authentification CAS. Malheureusement j'obtiens l'erreur suivante :
Etant nouveau sur cakephp, je ne sais pas trop quoi faire.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 Error: Call to a member function checkAuthenticate() on boolean File C:\xampp\htdocs\synchro-mdp\src\Controller\AppController.php Line: 69
Tout d'abord, j'ai installé la librairie phpCAS
Voici l'architecture du projet :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 -- mon-projet -- vendor -- CAS -- src -- CAS.php et son dossier (Librairie phpCAS) -- plugins -- AuthCas -- src -- Auth -- CasAuthenticate.php (Mon authentification)
Maintenant voici le contenu des fichiers :
CasAuthenticate.php
Dans bootstrap.php, j'ai rajouté les lignes suivantes :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40 <?php namespace AuthCas\Auth; use Cake\Auth\BaseAuthenticate; use Cake\Core\Configure; require_once ROOT . DS . 'vendor' . DS . 'CAS' . DS . 'src' . DS . 'CAS.php'; class CasAuthenticate extends BaseAuthenticate { private $_userId = NULL; public function authenticate(Request $request, Response $response) { phpCAS::forceAuthentication(); return array('username' => phpCAS::getUser()); } public function checkAuthenticate() { // debugging phpCAS::setDebug(); // initialize phpCAS phpCAS::client(CAS_VERSION_2_0, Configure::read('CAS.hostname'), Configure::read('CAS.port'), Configure::read('CAS.uri')); // no SSL validation for the CAS server phpCAS::setNoCasServerValidation(); if(phpCAS::checkAuthentication()) { $this->_userId = phpCAS::getUser(); return true; } return false; }
Et enfin dans AppController.php :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 Plugin::load('AuthCas'); /** * CAS config */ Configure::write('CAS.hostname', 'cas.insa-cvl.fr'); Configure::write('CAS.port', 443); Configure::write('CAS.uri', '/'); Configure::write('CAS.cert_path', ''); Configure::write('CAS.debug_log_enabled', FALSE);
Si besoin je peux transmettre l'intégralité du code, j'ai seulement sélectionner les parties qui me semblait importante.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68 <?php namespace App\Controller; use Cake\Controller\Controller; use Cake\Event\Event; use AuthCas\Auth; class AppController extends Controller { /** * Initialization hook method. * * Use this method to add common initialization code like loading components. * * @return void */ public function initialize() { parent::initialize(); $this->loadComponent('Flash'); $this->loadComponent('Auth', [ 'loginRedirect' => [ 'controller' => 'Articles', 'action' => 'index' ], 'logoutRedirect' => [ 'controller' => 'Pages', 'action' => 'display', 'home' ] ]); } public function beforeFilter(Event $event) { // $this->Auth->allow(['index', 'view', 'display']); $this->Auth->config('authenticate', [ 'Cas' => [userModel => 'Members'], 'Form', ]); $session = $this->request->session(); // vérification de la connexion if(!$session->check('User.id')) { if($this->Cas->checkAuthenticate()) { } // sinon on redirige vers la page de connexion pour utilisateurs locaux elseif($this->name != 'users' && $this->action != 'log_in') { $this->redirect(array('controller' => 'users', 'action' => 'log_in')); exit(); } } else { // id de l'utilisateur $this->user_id = $session->read('User.id'); } } }
Je suis preneur pour toute information, merci d'avance.
Peruvio
Partager