作为请求之前总是重定向到即使是经过身份验证的用户登录页面

问题描述 投票:0回答:1

我在yii2基本项目登录行动实施身份验证似乎运作良好

public function actionLogin()
{
    $this->layout = "login-layout"; 
    if (!Yii::$app->user->isGuest) {
        return $this->goHome();
    }

    $model = new LoginForm();
    if ($model->load(Yii::$app->request->post()) && $model->login()) {
        if (Yii::$app->user->isGuest) {
            var_dump("guest"); die();
        } else {
            var_dump("This is user"); die();
        }   
    }

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

如下所示我已经配置为在config.php请求之前

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

我的问题是,即使用户认证成功还是不能访问其他网页不断重定向到登录页面,请帮我解决这个问题。

yii2 yii2-basic-app yii2-user
1个回答
1
投票

最后,我能够调试的几个小时后,解决这个问题。问题是由findIdentity方法在我的用户模型造成的,自从我创造它返回NULL,如下图所示

public static function findIdentity($MemberId) {
    $user = self::find();   
     return ;//static($user);
}

所以我把它改成

public static function findIdentity($MemberId) {
    $user = self::find()->where(['MemberId' => $MemberId])->one();  
     return $user;
}

现在,它工作正常,所以这个问题是不是在为beforeRequest而不是应用程序中没有找到实际的用户。

© www.soinside.com 2019 - 2024. All rights reserved.