2017-04-18 14 views
0

auth_key에 문제가 있습니다. 로그인 양식이 있습니다. 나를 기억하지 못하고 저를 기억하지 않으면 제대로 작동하지만 yii 문서를 읽었습니다. 그 문서는 저를 기억하고 있습니다. ID와 오랜 시간에 사용자를 유지하기 위해 쿠키를 생성하기위한 auth_key에, 나는 프레임 워크 코드를 확인하고 세 개의 매개 변수가이에 (아이디, auth_key, expire_time()) 내가 사용자 테이블에 auth_key를 저장하고 코드가 여기yy2의 auth_key가 쿠키베이스에 간섭하지 않습니다

public function generateAuthKey() 
{ 
    $this->auth_key = Yii::$app->security->generateRandomString(); 
} 

public function validateAuthKey($authKey) 
{ 
    return $this->getAuthKey() === $authKey; 
} 

public function getAuthKey() 
{ 
    return $this->auth_key; 
} 
입니다

하지만 문제가 있는데, 사이트에 로그인 한 사용자 테이블에 가서 auth_key 필드를 변경하면 사용자가 페이지를 새로 고치면 인증 키가 변경되어 사이트를 폐기해야합니다.하지만 사용자 사이트에 로그인 유지, 문제가있는 곳 ?

답변

0

주로 auth_key의 사용은 쿠키로 사용자를 인증하는 것입니다 (사용자는 다시 로그인 데이터를 입력 할 필요가 없습니다). 로그인시 기억하도록 선택하면 이것이 기억되는 방식입니다. 어떻게 든 시스템을 식별하고 로그인해야합니다. u를 변경하면 사용자를 로그 아웃하지 않습니다.

+0

문서에서 : getAuthKey() : 쿠키 기반 로그인을 확인하는 데 사용되는 키를 반환합니다. 키는 로그인 쿠키에 저장되며 나중에 로그인 쿠키가 유효한지 확인하기 위해 서버 측 버전과 비교됩니다. validateAuthKey() : 쿠키 기반 로그인 키를 확인하는 논리를 구현합니다. –

+0

어떻게 auth_key에 액세스 할 수 있습니까, 사용자 세션을 종료하고 싶습니다. 사용자가 쿠키를 저장하고 "_identity"를 생성했으며 새로 고침 페이지가 사용자 패널로 나가면 auth_key를 사용자가 변경하려고합니다. –

+0

예, 그게 끝이에요. exacly 않습니다. 쿠키 기반 로그인은 사용자가 로그 아웃 할 때 다시 로그인 데이터를 제공하지 않고 '자동 로그인'을 허용합니다. U는 이것으로 사용자 세션을 종료 할 수 없습니다. – Yupik

0

"ValidateAutney"방법으로 직접 키를 변경하려고 할 수 있지만 이는 좋지 않을 것이므로 세션 시간을 설정하는 것이 좋습니다.

+0

감사합니다. 나는 auth_key 값으로 db에 세션을 저장했습니다. –

+0

excusme을 해결했습니다. Yupik의 의견을 확인할 수 있었습니까? –

0
'session' => [ 
     'class' => 'yii\mongodb\Session', 
     'writeCallback' => function($session) 
     { 
      return [ 
       'user_id' => Yii::$app->user->id, 
       'agent' => Yii::$app->request->getUserAgent(), 
       'ip' => Yii::$app->request->getUserIP(), 
       'auth_key' => Yii::$app->security->generateRandomString(), 
      ]; 
     } 
    ], 

    public function getAuthKey() 
{ 

    Yii::$app->session->open(); 

    $query = new Query(); 

    $query->select(['auth_key']) 
     ->from('cache') 
     ->where(['id'=> Yii::$app->session->id ]); 
    $row = $query->one(); 
    return $row['auth_key']; 
}