Buenas Aland, Muchas gracias! funciona estupendamente.
Saludos El 21 de noviembre de 2012 18:19, Aland Laines <[email protected]>escribió: > Rosa usa el helper Session para traer los datos en tu vista, en tu caso > > > <?php echo $this->Session->read('User');?> > > > *Aland Laines Calonge* > Twitter: @lainessolutions > http://about.me/aland.laines > > > > > El 21 de noviembre de 2012 11:52, Rosa Atienza Ribés < > [email protected]> escribió: > > Muchísimas gracias Aland aunque no se si porque he hecho algo mal no >> consigo exactamente el comportamiento que busco . >> >> La idea es una página principal (home) que dependiendo de si estas >> logueado o no muestra una información diferente, ejemplo el bienvenido >> <nombre_usuario> >> >> Con lo que me has enviado tengo el login con el que puedo entrar, he >> añadido en pages en la funcion beforeFilter que me permita acceder al home >> pero en cuanto hago eso la variable $_SESSION se queda vacía. >> >> >> *AppController.php* >> >> App::uses('Controller', 'Controller'); >> class AppController extends Controller { >> var $components = array('Session', >> 'Auth' => array( >> 'loginRedirect' => >> array('controller' => 'pages', 'action' => 'display', 'home'), >> 'logoutRedirect' => >> array('controller' => 'pages', 'action' => 'display', 'home'), >> 'authError' => 'No ha ingresado >> en el sistema' >> )); >> >> var $helpers= array('Js' => array('Jquery'),'Html','Form','Session'); >> >> >> public function beforeFilter(){ >> parent::beforeFilter(); >> $this->Auth->deny(); //todos los controladores se deniegan a no >> ser que estes logueado >> } >> >> } >> >> >> *UsersController.php * >> >> class UsersController extends AppController{ >> var $name='Users'; >> >> >> public function beforeSave($options = array()) { >> if (isset($this->data[$this->alias]['password'])) { >> $this->data[$this->alias]['password'] = >> AuthComponent::password($this->data[$this->alias]['password']); >> } >> return true; >> } >> >> >> public function login(){ >> if ($this->request->is('post')) { >> if ($this->Auth->login()) { >> $this->Session->write('User',$this->User); >> >> $id = AuthComponent::user('id'); >> $this->Session->write('Usuario.id',$id); >> $this->redirect($this->Auth->redirect()); >> } else { >> $this->Session->setFlash(__('Usuario o >> contraseña inválida, pruebe de nuevo.')); >> } >> } >> } >> >> public function logout(){ >> >> $this->Session->destroy(); >> $this->redirect($this->Auth->logout()); >> } >> } >> >> >> *PagesController * >> >> class PagesController extends AppController { >> >> /** >> * Controller name >> * >> * @var string >> */ >> public $name = 'Pages'; >> >> /** >> * This controller does not use a model >> * >> * @var array >> */ >> public $uses = array(); >> >> /** >> * Displays a view >> * >> * @param mixed What page to display >> * @return void >> */ >> public function display() { >> $path = func_get_args(); >> >> $count = count($path); >> if (!$count) { >> $this->redirect('/'); >> } >> $page = $subpage = $title_for_layout = null; >> >> if (!empty($path[0])) { >> $page = $path[0]; >> } >> if (!empty($path[1])) { >> $subpage = $path[1]; >> } >> if (!empty($path[$count - 1])) { >> $title_for_layout = >> Inflector::humanize($path[$count - 1]); >> } >> $this->set(compact('page', 'subpage', >> 'title_for_layout')); >> $this->render(implode('/', $path)); >> } >> >> * >> public function beforeFilter(){ >> parent::beforeFilter(); >> $this->Auth->allow('display'); >> } >> * >> >> Esto que he puesto en negrita, es realmente el cambio, si lo pongo me >> permite acceder a home sin tener que autentificarme pero el $_SESSION esta >> vacío aunque me haya autentificado :/ >> >> Si no lo pongo, no puedo acceder. >> >> */View/Pages/home.ctp >> * >> >> if (Configure::read('debug') == 0): >> throw new NotFoundException(); >> endif; >> App::uses('Debugger', 'Utility'); >> ?> >> >> >> <?php >> debug($_SESSION); >> >> if ( $_SESSION ){ >> $user = $_SESSION['Auth']['User']; >> echo "Bienvenido <strong>".$user['username']."</strong>"; >> echo "<br />"; >> echo $this->Html->link('Logout','../users/logout'); >> >> }else{ >> echo $this->Html->link('Login','../users/login'); >> } >> echo "<br />"; >> ?> >> >> >> Muchisimas gracias, >> >> >> Un Saludo. >> >> >> >> >> >> El 21 de noviembre de 2012 16:56, Aland Laines >> <[email protected]>escribió: >> >> Rosa, no se como lo estes trabajando pero yo hago esto: >>> >>> *AppController.php* >>> >>> class AppController extends Controller { >>> >>> public $components = array( >>> 'Session', >>> 'Auth' => array( >>> 'loginRedirect' => array('controller' => 'personas', >>> 'action' => 'index'), >>> 'logoutRedirect' => array('controller' => 'users', 'action' >>> => 'login'), >>> 'authError' => 'No ha ingresado al sistema.', >>> ) >>> ); >>> public $helpers = array('Js'=>array('Jquery'), 'Html', >>> 'Form','Session'); >>> >>> public function beforeFilter() { >>> parent::beforeFilter(); >>> $this->Auth->deny(); // todos los controllers son accesibles >>> solo logueando >>> } >>> } >>> >>> *User.php (Modelo)* >>> >>> App::uses('AuthComponent', 'Controller/Component'); >>> class User extends AppModel { >>> >>> public function beforeSave($options = array()) { >>> if (isset($this->data[$this->alias]['password'])) { >>> $this->data[$this->alias]['password'] = >>> AuthComponent::password($this->data[$this->alias]['password']); >>> } >>> return true; >>> } >>> >>> >>> public $validate = array( >>> 'username' => array( >>> 'required' => array( >>> 'rule' => array('notEmpty'), >>> 'message' => 'Escriba un nombre de usuario' >>> ) >>> ), >>> 'password' => array( >>> 'required' => array( >>> 'rule' => array('notEmpty'), >>> 'message' => 'Escriba su clave' >>> ) >>> ), >>> 'role' => array( >>> 'valid' => array( >>> 'rule' => array('inList', array('admin', 'digitador')), >>> 'message' => 'Please enter a valid role', >>> 'allowEmpty' => false >>> ) >>> ) >>> ); >>> } >>> >>> *UserController.php (Controlador)* >>> >>> class UsersController extends AppController { >>> >>> public function beforeFilter() { >>> parent::beforeFilter(); >>> $this->Auth->allow('add'); // Letting users register themselves >>> } >>> >>> public function login() { >>> if ($this->request->is('post')) { >>> if ($this->Auth->login()) { >>> $id = AuthComponent::user('id'); >>> $nombre = $this->nombuse($id); >>> $this->Session->write('Usuario.nombre', $nombre); >>> $this->Session->write('Usuario.id',$id); >>> $this->redirect($this->Auth->redirect()); >>> } else { >>> $this->Session->setFlash(__('Usuario o password >>> incorrecto.'), 'default', array(), 'auth'); >>> } >>> } >>> $this->layout = 'login'; >>> } >>> >>> public function logout() { >>> //$this->Session->setFlash(__('Ha salido del >>> sistema.','default', array(), 'auth')); >>> $this->Session->destroy(); >>> $this->redirect($this->Auth->logout()); >>> } >>> >>> public function add() { >>> if ($this->request->is('post')) { >>> $this->User->create(); >>> if ($this->User->save($this->request->data)) { >>> $this->Session->setFlash(__('The user has been saved')); >>> $this->redirect(array('action' => 'index')); >>> } else { >>> $this->Session->setFlash(__('The user could not be >>> saved. Please, try again.')); >>> } >>> } >>> } >>> } >>> >>> Esto solo es básico, no esta implementado lo de ACL, pero para que >>> comienzes estaria bien. >>> >>> En esta linea: >>> $this->Session->write('Usuario.nombre', >>> $nombre); >>> >>> escribes lo que quieres que se almacene en Session, para recuperarlo en >>> tu vista usas esto: >>> >>> <?php echo >>> $this->Session->read('Usuario.nombre');?> >>> >>> Espero te sirva, >>> >>> >>> Saludos, >>> >>> *Aland Laines Calonge* >>> Twitter: @lainessolutions >>> http://about.me/aland.laines >>> >>> >>> >>> >>> El 21 de noviembre de 2012 04:15, Rosa Atienza Ribés < >>> [email protected]> escribió: >>> >>>> Buenas a todos, >>>> >>>> Estoy empezando con Cake de hecho este va a ser mi primer proyecto en >>>> el que utilizo este framework y nada más empezar me he encontrado el primer >>>> problema. >>>> >>>> Queremos hacer 1 página inicial en el que en si estas logueado ponga >>>> bienvenido <nombre_usuario> y si no ponga el típico formulario para hacer >>>> login o un enlace para loguearse. >>>> >>>> Pues esto tan sencillo no consigo hacerlo, de ninguna manera, ya que si >>>> saco esta página inicial del "login" entonces es como si $_SESSION no se >>>> cargara y es un array vacío aunque el usuario se haya logueado de forma >>>> correcta. >>>> >>>> >>>> No se si me estoy explicando bien, cualquier cosa me comentais. >>>> >>>> ¿Hay forma de solucionarlo? ¿o es que deben ser páginas >>>> independientes? >>>> >>>> >>>> Muchísimas gracias. >>>> >>>> Saludos >>>> >>>> -- >>>> Has recibido este mensaje porque estás suscrito al grupo "CakePHP-es" >>>> de Grupos de Google. >>>> Para publicar una entrada en este grupo, envía un correo electrónico a >>>> [email protected]. >>>> Para anular tu suscripción a este grupo, envía un correo electrónico a >>>> [email protected] >>>> Para tener acceso a más opciones, visita el grupo en >>>> http://groups.google.com/group/cakephp-es?hl=es. >>>> >>> >>> -- >>> Has recibido este mensaje porque estás suscrito al grupo "CakePHP-es" de >>> Grupos de Google. >>> Para publicar una entrada en este grupo, envía un correo electrónico a >>> [email protected]. >>> Para anular tu suscripción a este grupo, envía un correo electrónico a >>> [email protected] >>> Para tener acceso a más opciones, visita el grupo en >>> http://groups.google.com/group/cakephp-es?hl=es. >>> >> >> -- >> Has recibido este mensaje porque estás suscrito al grupo "CakePHP-es" de >> Grupos de Google. >> Para publicar una entrada en este grupo, envía un correo electrónico a >> [email protected]. >> Para anular tu suscripción a este grupo, envía un correo electrónico a >> [email protected] >> Para tener acceso a más opciones, visita el grupo en >> http://groups.google.com/group/cakephp-es?hl=es. >> > > -- > Has recibido este mensaje porque estás suscrito al grupo "CakePHP-es" de > Grupos de Google. > Para publicar una entrada en este grupo, envía un correo electrónico a > [email protected]. > Para anular tu suscripción a este grupo, envía un correo electrónico a > [email protected] > Para tener acceso a más opciones, visita el grupo en > http://groups.google.com/group/cakephp-es?hl=es. > -- Has recibido este mensaje porque estás suscrito al grupo "CakePHP-es" de Grupos de Google. Para publicar una entrada en este grupo, envía un correo electrónico a [email protected]. Para anular tu suscripción a este grupo, envía un correo electrónico a [email protected] Para tener acceso a más opciones, visita el grupo en http://groups.google.com/group/cakephp-es?hl=es.
