2017-02-07 2 views
0

나는 미쳐 가기 전에 나를 도울 수 있기를 바랍니다. 사용자를 로그인하려고합니다. 이는YII2 - Author

\yii::$app->user->login 

후 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를하고 있어요 경우

이다 나는 다음과 같은 덤프

당신이 볼
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) "[email protected]" ["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) "[email protected]" ["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) { } } 

있어, 아이디, FIRST_NAME의 필드, last_name 등이 채워집니다.

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) "[email protected]" ["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) "[email protected]" ["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 등의 내용이 사라 것을 :

\yii::$app->user->identity 

에 위해서 var_dump를하고있는 항목 페이지에 리디렉션 후 나는 다음과 같은 내용을 얻었다. 사용자가 게스트인지 여부를 묻는 것이 가능합니다. 게스트는 잘못된 것으로 반환됩니다 (사용자가 로그인 한 경우). 나를 LAST_NAME 등 아이디, FIRST_NAME 같은 필드의 값을 얻을 수 있도록 그들이 NULL이기 때문에 그러나, 수 없습니다 :

사용자를위한

구성 파일 : 난 전에

'user' => [ 
     'identityClass' => 'app\models\User', 
     'enableAutoLogin' => true, 
     'enableSession' => true, 
    ], 

아무도 나를 도와 드릴까요 미쳤어!

감사 크리스

+1

당신이 무슨 일이 일어나고 있는지 전혀 모르는 것 같습니다 정직하게 'findOne()'2) 같은 속성의 이미 가져온 값으로 속성을 다시 설정 3)'Yii :: $ app'에서 적절한'Yii' 대신 소문자'yii'를 사용하고 마지막으로 4)'login()'는'false'의'true'를 리턴했습니다. 나는 [Yii 2.0에 대한 확실한 안내서] (http://www.yiiframework.com/doc-2.0/guide-index.html)를 읽기를 강력히 권장합니다. – Bizley

답변

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

제 가정은 사용자 모델 (id, last_name, first_name 등) 내에 일부 공용 변수를 설정한다는 것입니다. 이것은 작동하지 않을 것이며 이유는 다음과 같습니다.

모델에 "yii \ web \ IdentityInterface"가 구현됩니다. 이것 좀 봐.

actionLogin()에서 모델을 찾고 모델의 공용 변수를 설정 한 다음 로그인을 시도합니다. 로그인이 성공하면 , 무슨 세션에 저장되어 사용자의 모델 구현은, 데이터가 세션에 저장되지 않도록하는 기능입니다

$identity->getId() 

의 ID입니다. 당신이 신원을 요청할 때 엔트리 페이지로

는 세션이 ID를 검사 한 후 사용자 모델의

findIdentity($id) 

은 모델에 의해 구현 정적 함수 인이라고합니다.

이번에는 마지막 함수에서 사용자 모델을 반환합니다.

변수를 직접 추가하려면 모델에서이 함수를 편집 (또는 재정의) 할 수 있습니다. 예.

public static function findIdentity($id) 
{ 
    return static::findOne(['id' => $id, 'status' => self::STATUS_ACTIVE]); 
} 

변화 : 1)`$의 model`와`로드()를 사용하여`다음에 순수 POST를 통과 :

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; 
}