我希望你能在我疯了之前帮助我。 我正在尝试登录用户。 这是actionLogin
public function actionLogin() {
$model = new User();
if ($model->load(Yii::$app->request->post()) && $model->validate()) {
$arrPost = Yii::$app->request->post();
$identity = User::findOne(['email'=>$arrPost['User']['email'],'password'=>$arrPost['User']['password']]);
$identity->id = $identity->getAttribute('id');
$identity->last_name = $identity->getAttribute('last_name');
$identity->first_name = $identity->getAttribute('first_name');
$identity->admin = $identity->getAttribute('admin');
$identity->address = $identity->getAttribute('address');
$identity->ministry = $identity->getAttribute('ministry');
\yii::$app->user->login($identity,86400);
return $this->redirect(Url::to(['app/index']));
} else {
// either the page is initially displayed or there is some validation error
return $this->render("@app/forms/user/login", ['model' => $model]);
}
}
如果我在
之后做了一个var_dump\yii::$app->user->login
我得到了以下转储
object(app\models\User)#88 (17) { ["id"]=> int(1) ["first_name"]=> string(12) "Christianfds" ["last_name"]=> string(7) "Köster" ["email"]=> NULL ["admin"]=> bool(true) ["password"]=> NULL ["address"]=> string(16) "Lieber Christian" ["ministry"]=> string(6) "" ["auth_key"]=> NULL ["_attributes":"yii\db\BaseActiveRecord":private]=> array(8) { ["id"]=> int(1) ["first_name"]=> string(12) "Christianfds" ["last_name"]=> string(7) "Köster" ["email"]=> string(25) "kirche@familie-koester.eu" ["admin"]=> bool(true) ["password"]=> string(5) "chris" ["address"]=> string(16) "Lieber Christian" ["ministry"]=> string(6) "Diakon" } ["_oldAttributes":"yii\db\BaseActiveRecord":private]=> array(8) { ["id"]=> int(1) ["first_name"]=> string(12) "Christianfds" ["last_name"]=> string(7) "Köster" ["email"]=> string(25) "kirche@familie-koester.eu" ["admin"]=> bool(true) ["password"]=> string(5) "chris" ["address"]=> string(16) "Lieber Christian" ["ministry"]=> string(6) "Diakon" } ["_related":"yii\db\BaseActiveRecord":private]=> array(0) { } ["_errors":"yii\base\Model":private]=> NULL ["_validators":"yii\base\Model":private]=> NULL ["_scenario":"yii\base\Model":private]=> string(7) "default" ["_events":"yii\base\Component":private]=> array(0) { } ["_behaviors":"yii\base\Component":private]=> array(0) { } }
您会看到,id,first_name,last_name等字段已填充。重定向到入口页面并在
上执行var_dump之后\yii::$app->user->identity
我收到了以下内容:
object(app\models\User)#93 (17) { ["id"]=> NULL ["first_name"]=> NULL ["last_name"]=> NULL ["email"]=> NULL ["admin"]=> NULL ["password"]=> NULL ["address"]=> NULL ["ministry"]=> NULL ["auth_key"]=> NULL ["_attributes":"yii\db\BaseActiveRecord":private]=> array(8) { ["id"]=> int(1) ["first_name"]=> string(12) "Christianfds" ["last_name"]=> string(7) "Koester" ["email"]=> string(25) "kirche@familie-koester.eu" ["admin"]=> bool(true) ["password"]=> string(5) "chris" ["address"]=> string(16) "Dear Christian" ["ministry"]=> string(6) "" } ["_oldAttributes":"yii\db\BaseActiveRecord":private]=> array(8) { ["id"]=> int(1) ["first_name"]=> string(12) "Christianfds" ["last_name"]=> string(7) "Koester" ["email"]=> string(25) "kirche@familie-koester.eu" ["admin"]=> bool(true) ["password"]=> string(5) "chris" ["address"]=> string(16) "Dear Christian" ["ministry"]=> string(6) "" } ["_related":"yii\db\BaseActiveRecord":private]=> array(0) { } ["_errors":"yii\base\Model":private]=> NULL ["_validators":"yii\base\Model":private]=> NULL ["_scenario":"yii\base\Model":private]=> string(7) "default" ["_events":"yii\base\Component":private]=> array(0) { } ["_behaviors":"yii\base\Component":private]=> array(0) { } }
您会看到id,first_name,last_name等的内容消失了。可以询问用户是否是来宾,返回错误(用户已登录)。但是我不可能从id,first_name,last_name等字段中获取值,因为它们是NULL:
用户的配置文件:
'user' => [
'identityClass' => 'app\models\User',
'enableAutoLogin' => true,
'enableSession' => true,
],
在我生气之前,有人可以帮助我吗?
由于 克里斯
答案 0 :(得分:0)
有许多不必要的代码......如果所有其他事情都按计划进行,可以通过以下方式完成。
public function actionLogin() {
$model = new User();
if ($model->load(Yii::$app->request->post()) && $model->validate()) {
\yii::$app->user->login($model); //does your user model have login function??
return $this->redirect(Url::to(['app/index']));
} else {
return $this->render("@app/forms/user/login", ['model' => $model]);
}
}
答案 1 :(得分:0)
它可以用作预期。从第二个转储中可以清楚地看到用户模型已加载,例如填充了“_attributes”。
我的假设是你的用户模型中有一些公共变量(id,last_name,first_name等),例如:
class User {
public $id;
public $last_name;
...
}
在actionLogin()中,您可以找到模型并为模型设置公共变量,然后尝试登录。 虽然您在登录前设置了这些,但在重定向后不会设置它们。这是预期的,因为您的模型实现了“yii\web\IdentityInterface”。
当您的登录成功时,只会将身份的ID保存在会话中,该会话由以下人员提供:
$identity->getId()
不是用户模型本身。
重定向到输入页面后,使用会话中保存的ID加载身份,使用以下函数:
public static function findIdentity($id)
用户模型。
如果要添加自己的变量,可以在模型中编辑(或覆盖)此功能。 例如
public static function findIdentity($id)
{
return static::findOne(['id' => $id, 'status' => self::STATUS_ACTIVE]);
}
更改为:
public static function findIdentity($id)
{
$identity = static::findOne(['id' => $id, 'status' => self::STATUS_ACTIVE]);
$identity->id = $identity->getAttribute('id');
$identity->last_name = $identity->getAttribute('last_name');
// etc.
return $identity;
}