es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Yii2: no redireccionar al inicio de sesión para una acción específica en el controlador.

Tengo un controlador personalizado y estoy tratando de definir una acción en el controlador a la que los usuarios invitados puedan acceder.
Mi código de controlador es el siguiente:

class MyCustomController extends Controller
{
    ...
    /**
     * {@inheritdoc}
     */
    public function behaviors()
    {
        return [
            'verbs' => [
                'class' => VerbFilter::className(),
                'actions' => [
                    'delete' => ['POST'],
                ],
            ],
            'access' => [
                'class' => AccessControl::class,
                'only' => ['live'],
                'rules' => [
                    [
                        'allow' => true,
                        'actions' => ['live'],
                        'roles' => ['?'],
                    ],
                ]
            ]
        ];
    }

    /**
     * Acción en vivo.
     * @return mixed
     */
    public function actionLive()
    {
        return $this->render('live');
    }

    ...
}

Y el código de la vista es el siguiente:

<?php

echo '¡Estamos en vivo!';

?>

También tengo esta configuración en frontend/config/main.php:

return [
...
    'as beforeRequest' => [
        'class' => 'yii\filters\AccessControl',
        'rules' => [
            [
                'actions' => ['login', 'error'],
                'allow' => true,
            ],
            [
                'allow' => true,
                'roles' => ['@'],
            ],
        ],
    ],
...
];

Cuando intento acceder a la página http://mi-webapp/mi-custom/live` como un usuario autenticado, obtengo el mensajeProhibido (#403)`, lo cual está bien (aunque mostrarlo también estaría bien para los usuarios autenticados).

Pero cuando accedo a esa página como un usuario invitado, soy redirigido a la página de inicio de sesión. Solo quiero desactivar la redirección para esta acción en particular y permitir que los usuarios invitados vean esa vista.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para permitir que los usuarios invitados accedan a la acción “live” en nuestro controlador “MyCustomController”, debemos modificar las reglas de acceso en el método “behaviors()” del controlador.

    Actualmente, la regla de acceso para la acción “live” está configurada para permitir solo a usuarios autenticados (roles => ['@']). Para permitir que los usuarios invitados accedan a la acción, debemos cambiar la propiedad roles de la regla a ['?', '@'], lo cual permite tanto a usuarios invitados como autenticados:

    'access' => [
        'class' => AccessControl::class,
        'only' => ['live'],
        'rules' => [
            [
                'allow' => true,
                'actions' => ['live'],
                'roles' => ['?', '@'],
            ],
        ],
    ],
    

    Con este cambio, los usuarios invitados deberían poder acceder a la acción “live” sin ser redirigidos a la página de inicio de sesión.

Comments are closed.