如何使用户登录在yii2中完美运行

时间:2019-08-06 08:06:57

标签: php authentication yii2

实际上,我使用的是yii2基本模板,其中构建了不同的控制器,模型和视图,还开发了登录系统 但是我想何时首先路由到任何操作控制器,但必须确保用户是否登录(如果用户登录),那么他(她)必须提供访问权限,否则应提示用户进入登录页面。

我已经与一些高年级学生进行了交流,但是我无法说服我也要对像StackOverflow这样的不同平台进行一些研究,但是仍然处于停滞状态。

3 个答案:

答案 0 :(得分:1)

据我所知,您可以找到一个简单的方法来解决这个问题:

if (Yii::$app->user->isGuest)

您还可以使用behaviors使用AccessControl函数,如下所示:

public function behaviors()
    {
        return [
            'access' => [
                'class' => AccessControl::class,
                'rules' => [
                    [
                        'allow' => true,
                        'roles' => ['@'],
                    ],
                ],
            ],
        ];
    }

您可以详细了解here。您还需要其他东西吗?据我所知,其中之一应该可以为您提供帮助,但是如果您需要一些特别的东西,请告诉我。

答案 1 :(得分:0)

在操纵杆中,放置行为功能如下:

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,
    ]);
}

答案 2 :(得分:0)

您可以通过在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,
];

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