users example cakedc cake forms security cakephp plugins

forms - example - CakePHP 2.x: Incrustar un formulario de inicio de sesión como un elemento utilizando el complemento de usuario y componente de seguridad de CakeDC



cakedc users (1)

nuevo usuario de CakePHP aquí. No he podido encontrar una solución a este problema.

Me gustaría insertar un formulario de inicio de sesión como un elemento en una página existente. Estoy usando el complemento de usuario de CakeDC. El objetivo es insertar el formulario de inicio de sesión en la página y luego, cuando inicien sesión, actualizar el contenido de la página sin actualizar la página. Antes de preocuparnos por AJAX y SecurityComponent, me gustaría al menos obtener el formulario incrustado en alguna otra página como un elemento.

Para empezar, intenté copiar y pegar directamente el contenido de ''/Views/Users/login.ctp'' en el elemento. Esto me dio una advertencia de "$ undefined variable" $ Model "'', así que codifiqué el modelo como'' Users.User ''(porque asumí que la notación para acceder a un modelo dentro de un complemento era'' plugin.model ''como decían en el manual). Esto falló con el mensaje de error Error: Users.usersController no se pudo encontrar.

Entonces, ajusté el formulario para tomar ''Usuario'' como modelo en lugar de $ modelo y la solicitud ahora se ennegreció. Si desactivo el componente de seguridad, puedo iniciar sesión correctamente. Esta no es una solución bastante satisfactoria (es decir, podría optar por no validar el formulario o definir ''iniciar sesión'' como una acción desbloqueada, pero si lo hago, entonces es posible que tampoco tenga la seguridad habilitada para iniciar sesión, ¿no? )

Aquí está el código para la aplicación / Plugin / Users / View / Elements / login.ctp:

<div class="users index"> <h2><?php echo __d(''users'', ''Login''); ?></h2> <fieldset> <?php echo $this->Form->create(''User'', array( ''action'' => ''login'', ''id'' => ''LoginForm'')); echo $this->Form->input(''User.email'', array( ''label'' => __d(''users'', ''Email''))); echo $this->Form->input(''User.password'', array( ''label'' => __d(''users'', ''Password''))); echo ''<p>'' . __d(''users'', ''Remember Me'') . $this->Form->checkbox(''remember_me'') . ''</p>''; echo ''<p>'' . $this->Html->link(__d(''users'', ''I forgot my password''), array(''action'' => ''reset_password'')) . ''</p>''; echo $this->Form->end(__d(''users'', ''Submit'')); ?> </fieldset>

A continuación se muestra el código de la Vista que llama al elemento:

<div id="loginform"> <?php echo $this->element(''Users.login''); ?> </div>

Si copio y pego el código del elemento en una Vista (por ejemplo, en apps/Plugin/Users/View/Users/login.ctp ), funciona independientemente de si la seguridad está apps/Plugin/Users/View/Users/login.ctp o desactivada, entonces sospecho que hay un monkeying con el formulario o las llamadas de seguridad están en orden.

Cualquier idea o ayuda sería muy apreciada.


Creo que el problema es que los elementos son esencialmente puntos de vista tontos, no están destinados a conocer modelos. Tendrás que pasar los datos en ti mismo.

Usualmente pongo $this->set("authUser", $this->Auth->user()); en mi AppController luego de configurar auth, esto me permite verificar los datos en el usuario actualmente conectado en cualquier lugar, incluidos los elementos.

También puede pasar datos directamente así:

<?php echo $this->element("Users.login", array("user"=>$user));?>

Además, no me olvido de su redacción, pero el inicio de sesión debe ser una acción desbloqueada. De lo contrario, ¿cómo iniciarán sesión los usuarios?