Php 如何让用户登录在yii2中完美工作

Php 如何让用户登录在yii2中完美工作,php,authentication,yii2,Php,Authentication,Yii2,事实上,我在YiI2Basic模板中工作过,在这里我构建了不同的控制器、模型和视图,还开发了一个登录系统 但我想在何时首先路由到任何操作控制器,它必须确保用户是否登录如果用户登录,那么他或她必须提供访问权限,否则应提示用户登录页面 我已经与一些高年级学生进行了沟通,但我无法说服我的大脑也对不同的平台(如StackOverflow)进行了一些研究,但仍处于停顿状态。据我所知,您正在寻找什么,像这样一个简单的事情应该可以解决问题: if (Yii::$app->user->isGuest

事实上,我在YiI2Basic模板中工作过,在这里我构建了不同的控制器、模型和视图,还开发了一个登录系统 但我想在何时首先路由到任何操作控制器,它必须确保用户是否登录如果用户登录,那么他或她必须提供访问权限,否则应提示用户登录页面


我已经与一些高年级学生进行了沟通,但我无法说服我的大脑也对不同的平台(如StackOverflow)进行了一些研究,但仍处于停顿状态。

据我所知,您正在寻找什么,像这样一个简单的事情应该可以解决问题:

if (Yii::$app->user->isGuest)
您还可以使用AccessControl的behaviors函数执行此操作,如下所示:

public function behaviors()
    {
        return [
            'access' => [
                'class' => AccessControl::class,
                'rules' => [
                    [
                        'allow' => true,
                        'roles' => ['@'],
                    ],
                ],
            ],
        ];
    }
public function behaviors()
{
    return [
        'access' => [
            'class' => AccessControl::className(),
            'rules' => [
                [
                    'allow' => true,
                    'roles' => ['@'],
                ],
            ],
        ],
        'verbs' => [
            'class' => VerbFilter::className(),
            'actions' => [
                'logout' => ['post'],
            ],
        ],
    ];
}
public function actionLogin()
{
    if (!Yii::$app->user->isGuest) {
        return $this->goHome();
    }

    $model = new LoginForm();
    if ($model->load(Yii::$app->request->post()) && $model->login()) {
        return $this->goBack();
    }

    $model->password = '';
    return $this->render('login', [
        'model' => $model,
    ]);
}

你可以阅读更多关于它的内容。你还需要什么吗?据我所知,其中一个应该能够帮助您,但是如果您需要什么特殊的东西,请告诉我。

在controller-put-behaviors函数中,如下所示:

public function behaviors()
    {
        return [
            'access' => [
                'class' => AccessControl::class,
                'rules' => [
                    [
                        'allow' => true,
                        'roles' => ['@'],
                    ],
                ],
            ],
        ];
    }
public function behaviors()
{
    return [
        'access' => [
            'class' => AccessControl::className(),
            'rules' => [
                [
                    'allow' => true,
                    'roles' => ['@'],
                ],
            ],
        ],
        'verbs' => [
            'class' => VerbFilter::className(),
            'actions' => [
                'logout' => ['post'],
            ],
        ],
    ];
}
public function actionLogin()
{
    if (!Yii::$app->user->isGuest) {
        return $this->goHome();
    }

    $model = new LoginForm();
    if ($model->load(Yii::$app->request->post()) && $model->login()) {
        return $this->goBack();
    }

    $model->password = '';
    return $this->render('login', [
        'model' => $model,
    ]);
}
登录函数如下所示:

public function behaviors()
    {
        return [
            'access' => [
                'class' => AccessControl::class,
                'rules' => [
                    [
                        'allow' => true,
                        'roles' => ['@'],
                    ],
                ],
            ],
        ];
    }
public function behaviors()
{
    return [
        'access' => [
            'class' => AccessControl::className(),
            'rules' => [
                [
                    'allow' => true,
                    'roles' => ['@'],
                ],
            ],
        ],
        'verbs' => [
            'class' => VerbFilter::className(),
            'actions' => [
                'logout' => ['post'],
            ],
        ],
    ];
}
public function actionLogin()
{
    if (!Yii::$app->user->isGuest) {
        return $this->goHome();
    }

    $model = new LoginForm();
    if ($model->load(Yii::$app->request->post()) && $model->login()) {
        return $this->goBack();
    }

    $model->password = '';
    return $this->render('login', [
        'model' => $model,
    ]);
}

通过在config/web.php文件中使用'as beforeRequest'配置,您可以在全局级别实现这一点,下面是示例:

$config = [
    'id' => 'basic',
    ...
    'components' => [
        ...
    ],
    'as beforeRequest' => [
        'class' => 'yii\filters\AccessControl',
        'rules' => [
            [
                'allow' => true,
                'actions' => ['login', 'forgot', 'verify', ],
            ],
            [
                'allow' => true,
                'roles' => ['@'],
            ],
        ],
        'denyCallback' => function () {
            return Yii::$app->response->redirect(['site/login']);
        },
    ],
    'params' => $params,
];

如果用户未登录,则用户将被重定向到站点控制器,登录操作

你在找这样的东西吗?读这个