web-dev-qa-db-fra.com

Rediriger vers une page autre que la connexion dans Yii 2 comportements

Existe-t-il un moyen de rediriger vers une page autre que la connexion à la méthode de comportement dans Yii 2?

Le contenu de ma méthode de comportement:

public function behaviors()
{
    return [
        'verbs' => [
            'class' => VerbFilter::className(),
            'actions' => [
                'delete' => ['post'],
            ],
        ],
        'access' => [
            'class' => AccessControl::className(),
            'only' => [ 'create','update' ],
            'rules' => [
                [
                    'allow' => true,
                    'actions' => [ 'create'],
                    'roles' => ['@'],
                ],
                [
                    'allow' => true,
                    'actions' => ['logout'],
                    'roles' => ['?'],
                ],
            ],
        ],
    ];
}

Mais cela redirige pour vous connecter. Je dois spécifier une autre page de redirection ou un appel:

throw new \yii\web\HttpException(403, 'The requested Item could not be found.');
16
user7282

Vous devez modifier la propriété loginUrl de la classe yii\web\User.

Si vous voulez le changer globalement, éditez votre config:

'components' => [
    'user' => [
        'loginUrl' => ['site/sign-in'],  
    ],
],

Si vous devez le modifier dans le contrôleur ou l'action spécifique, vous pouvez également le définir comme suit:

Yii::$app->user->loginUrl = ['site/sign-in'];

Vous devez redéfinir la méthode beforeAction() dans le contrôleur là où vous devez le faire. Tous les accès sont effectués dans cet événement.

/**
 * @inheritdoc
 */
public function beforeAction($action)
{
    if (parent::beforeAction($action)) {
        // If you want to change it only in one or few actions, add additional check

        Yii::$app->user->loginUrl = ['site/sign-in'];

        return true;
    } else {
        return false;
    }
}

Pour plus de détails, consultez la documentation officielle sur property et event .

18
arogachev

Vous pouvez bénéficier de denyCallback (), comme le document officiel de Yii2 le définit:

Un rappel qui sera appelé si l'accès doit être refusé à l'utilisateur actuel. Si non défini, denyAccess () sera appelé.

La signature du rappel doit être la suivante:

function ($rule, $action)

$rule est la règle qui refuse l'utilisateur, et $action est l'objet d'action actuel. $rule peut être null si l'accès est refusé car aucune des règles ne correspond.

Par exemple:

'denyCallback' => function($rule, $action) {
        if ($something) {
            //set flash for example
            Yii::$app->session->setFlash('key', 'Value');
            //Redirect
            return $action->controller->redirect('action');
        }
        //as a default behavior, it throws an exception
        throw new ForbiddenHttpException("Forbidden access");
 },
8
Ali MasudianPour

J'utilise yii2-user pour la gestion des utilisateurs, et la redirection vers la connexion allait vers/user/login au lieu de la/utilisateur/security/security/login/défini par l'utilisateur. ma solution consistait donc à mettre à jour les règles urlManager avec: '' => 'utilisateur/sécurité /'

Je suppose que cela pourrait également être utilisé pour rediriger vers un autre contrôleur/action autre que la connexion.

Voir ici .

1
alaink