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 mensaje
Prohibido (#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.
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 propiedadroles
de la regla a['?', '@']
, lo cual permite tanto a usuarios invitados como autenticados: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.