php - tutorial - yii2 plugins
Yii comprueba si el usuario está conectado antes de cada página (9)
Debo verificar si el usuario está conectado antes de representar cada ejemplo de página:
al comienzo, compruebe si el usuario está conectado, si no es así - redirigir la página de inicio de sesión Tom No quiero agregarlo en cada componente, ¿cómo hacerlo?
Escriba un código para verificar si el usuario está conectado o no en un archivo diferente.
Luego incluya esa página php en cada archivo.
Simplemente tendrá que escribir el siguiente código.
include(''checklogin.php'');
En la página checklogin.php, puede escribir lo siguiente para verificar si la cookie está configurada.
isset(cookie(''<name_of_cookie>''))
{
//User in already logged in
}
else
{
//Redirect to login page
}
Puede escribir un cheque en la función init()
del controlador. Lo cual redirigirá al usuario si no está conectado
public function init()
{
if(!isset(Yii::app()->session[''user'']))
{
$this->redirect(array(''login/''));
}
}
También puede verificar usando esto si es verdadero, entonces el usuario no ha iniciado sesión más conectado
if(Yii::app()->user->isGuest){
//not logged user
}else{
//loggedin user
}
Utilice la regla de acceso para asegurarse de que esta sea una mejor manera:
public function accessRules()
{
return array(
array(''allow'', // allow all users to perform ''index'' and ''contact'' actions
''actions''=>array(''index'',''contact''),
''users''=>array(''*''),
),
array(''allow'', // allow authenticated user to perform ''delete'' and ''update'' actions
''actions''=>array(''update'',''delete''),
''users''=>array(''@''),
),
array(''deny'', // deny all users
''users''=>array(''*''),
),
);
}
si realmente quieres una verificación de un lugar, ve al component/controller
y hazlo en el controlador. porque todo el controlador hereda de ese controlador.
Para una solución global, agregue accessControl a su controlador base (por defecto protected/components/CController.php
).
public function filters(){
return array(''accessControl'');
}
public function accessRules()
{
return array(
array(''allow'',
''users''=>array(''@''),
),
array(''deny'', // deny all users
''users''=>array(''*''),
),
);
}
Luego, en el controlador con su acción de inicio de sesión, edite las accessRules
de accessRules
para permitir que todos los usuarios accedan a la página de inicio de sesión.
public function accessRules()
{
return array_merge(array(
''allow'',
''actions''=>array(''login''),
''users''=>array(''*''),
),parent::accessRules()
);
}
Extender componentes / Controlador con beforeAction
public function beforeAction(CAction $action)
{
if(!isset(Yii::app()->session[''user'']) && !($action->controller->id == ''site'' && $action->id == ''login''))
{
$this->redirect(array(''site/login''));
}
return true;
}
Esto funciona para mí
public function beforeAction(CAction $action)
{
if(!isset(Yii::app()->user->user_id) && !($action->controller->id == ''site'' && $action->id == ''login''))
{
$this->redirect(array(''site/login''));
}
return true;
}
Solo necesita agregar la función anterior en component / Controller.php
puedes agregar un comportamiento global a tu configuración:
''as access'' => [
''class'' => /yii/filters/AccessControl::className(),
''rules'' => [
[
''actions'' => [''login'', ''error'', ''resend'', ''forgot''],
''allow'' => true,
],
// allow authenticated users
[
''allow'' => true,
''roles'' => [''@''],
],
]
],
http://stuff.cebe.cc/yii2docs/guide-concept-configurations.html#configuration-format
Perdón por la publicación de zombies, pero uso isGuest.
if (Yii::app()->user->isGuest)
{
$this->redirect(''login/page'');
}