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.

Responder a