TASK: Mejoras para evitar excepcion: "por favor cambie las referencias a 'useridentity' por 'crugeuser'"

Issue #16 new
Cristian Salazar repo owner created an issue

Cuando ocurre ? cuando ejecutas: http://localhost/tuapp/index.php?r=site/login, llenas el form de login y le das clic a Aceptar. Eso causará la excepcion.

Por qué ocurre ? Esto sucede principalmente porque estas usando el formulario de login por defecto de Yii, en cambio debes usar el de Cruge, al cual se accede mediante: <?php echo Yii::app()->user->ui->loginLink; ?>

Sucede internamente porque por defecto Yii trae un IUserIdentity que es una instancia del modelo interno de autenticacion de yii. Por tanto cruge no puede aprovechar sus funciones, ya que cruge tiene el suyo el cual es igual al original de IUserIdentity pero con mas funciones.

Comments (9)

  1. Rick O'Brien

    ¿Y si la interfaz de Cruge la heredamos de la de Yii? :) Creo que se podría resolver de esa manera (aunque la verdad no lo he probado, ni me ha producido errores de la forma en que actualmente está)

  2. Cristian Salazar reporter

    Hola Ricardo, en respuesta a eso que indicas. Si es compatible al 100%, al usuario se le da un form que saca provecho de Cruge, pero si el quiere usar el form login por defecto de yii puede aplicar esto:

    UNA SOLUCION SIMPLE (pero no recomendada) es:

    1. Editar tuapp/models/LoginForm.php

    2. cambiar UserIdentity por CrugeUser en los dos metodos donde aparece.

    Eso causará que puedan usar el formulario por defecto de Login de Yii.

    como punto desfavorable al hacer esto: tienen que hacer todo a mano, respecto al link de registration y de password recovery.

    SOLUCION OPTIMA: No usar el action site/login, sino el que se obtiene con: <?php echo Yii::app()->user->ui->loginLink; ?>

  3. Rick O'Brien

    Mirando con más detenimiento creo que la solución es no usar la función "get_class()" sino "instance of" para la comparación de las clases... así alguien podría usar una clase hija. ¿Alguna opinión?

  4. Cristian Salazar reporter

    cierto tienes razon. queda pendiente para resolver eso aunque no afecta al core solo al helper de ui,

  5. Rick O'Brien

    He revisado este tema y definitivamente agregaré este cambio al próximo pull request (cambiar get_class en favor de instanceof). Un pequeño cambio que añade flexibilidad, extensibilidad y facilidad de uso al módulo.

  6. 22alfredo22

    hola oye ricardo donde pongo esta instruccion <?php echo Yii::app()->user->ui->loginLink; ?>, y como asigno roles, tareas y operaciones.

    por que ya puse el filto de cruge en cada controller pero aun sigo teniendo acceso bueno gracias

  7. Alexis Artigas

    Ricardo Obregón

    Mirando con más detenimiento creo que la solución es no usar la función "get_class()" sino "instance of" para la comparación de las clases... así alguien podría usar una clase hija. ¿Alguna opinión?

    Saludos Christian y Ricardo. Estoy comenzando con Yii quisiera saber donde puedo editar lo que comentas sobre usar "instance of" en vez de "get_class()" para la comparación de las clases. Perdona la Ignorancia!

  8. Log in to comment