2015-07-03 62 views
1

查看:我總是授權Yii2

<?php 
    $modelLogin = new \app\models\LoginForm(); 
?> 
<div class="auth_box"> 
    <?php $form = ActiveForm::begin([ 
     'id' => 'login-form', 
     'action' => ['site/login'], 
     'enableClientValidation' => false, 
     'enableAjaxValidation' => true, 
     //'options' => ['class' => 'form-horizontal'], 
     'fieldConfig' => [ 
      'template' => "{input}\n<div class=\"form_error\">{error}</div>" 
     ] 
    ]); ?> 

    <?= $form->field($modelLogin, 'username')->textInput(['placeholder' => 'Login']) ?> 

    <?= $form->field($modelLogin, 'password')->passwordInput(['placeholder' => 'Password']) ?> 

    <?= $form->field($modelLogin, 'rememberMe', [ 
     'template' => "{input}", 
    ])->checkbox() ?> 

    <?= Html::submitInput('Enter') ?> 

    <?php ActiveForm::end(); ?> 

    <a href="#" id="restore_password">I don't remember my password</a> 
</div> 

控制器:

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

    $modelLogin = new LoginForm(); 

    if (Yii::$app->request->isAjax) { 
     $modelLogin->load(Yii::$app->request->post()); 
     Yii::$app->response->format = Response::FORMAT_JSON; 
     return ActiveForm::validate($modelLogin); 
    } elseif ($modelLogin->load(Yii::$app->request->post()) && $modelLogin->login()) { 
     return $this->goBack(); 
    } 
} 

模型,方法登錄:

public function login() 
{ 
    if ($this->validate()) { 
     return Yii::$app->user->login($this->getUser(), $this->rememberMe ? 3600 * 24 * 365 : 0); 
    } else { 
     return false; 
    } 
} 

當我檢查「記住我「我的餅乾看起來像:

enter image description here

_identity參數。

當我不勾選 「記住我」 我的餅乾看起來像:

enter image description here

沒有_identity參數。

在這兩種情況下,我總是在重新打開瀏覽器後授權。

+1

您使用的是Chrome嗎? Chrome以不刪除會話cookie而聞名,這將解釋關閉瀏覽器後始終得到授權的事實(請查閱http://stackoverflow.com/a/10772420/1235708)。 _identity參數可能是yii用來存儲用於通過cookie驗證用戶身份信息的cookie,這可以解釋當您設置記住我複選框時僅被設置的事實。 – bfilipesoares

+0

@bfilipesoares是的,Chrome。但是......我的Chrome可以使用很多人=) –

+0

是的,我明白了......但是沒有辦法繞過它......爲了註銷用戶(使用chrome),你必須將他註銷到服務器端(又名隱含地改變/銷燬他的會話)。 但是,如果您嘗試在Firefox中關閉窗口後,用戶在再次打開時將不會進行身份驗證。 – bfilipesoares

回答

0

您可以將PHP中的會話超時更改爲1分鐘或更短。
啓用自動登錄。在用戶類覆蓋afterLogin函數中更改AuthKey每次自動登錄。

相關問題