2017-09-13 13 views
0

でログイン後に常に真です。 が働いているサインアップするが、私は、ログインしようとしたときのYii :: $ APP-> USER-> isGuestは常に真であるが、それはそれが必要として働いているとのYii ::は$ APP->は、ユーザーが含まれている)(LoginForm ::ログイン中現在のユーザの情報。 LoginForm.php:これらの設定を含む

<?php 

namespace app\models; 

use Yii; 
use yii\base\Model; 

/** 
* LoginForm is the model behind the login form. 
* 
* @property User|null $user This property is read-only. 
* 
*/ 
class LoginForm extends Model 
{ 
    public $login; 
    public $pass; 
    public $rememberMe = true; 

    private $_user = false; 


    /** 
    * @return array the validation rules. 
    */ 
    public function rules() 
    { 
     return [ 
      // login and password are both required 
      [['login', 'pass'], 'required'], 
      // rememberMe must be a boolean value 
      ['rememberMe', 'boolean'], 
      // password is validated by validatePassword() 
      ['pass', 'validatePassword'], 
     ]; 
    } 

    /** 
    * Validates the password. 
    * This method serves as the inline validation for password. 
    * 
    * @param string $attribute the attribute currently being validated 
    * @param array $params the additional name-value pairs given in the rule 
    */ 
    public function validatePassword($attribute, $params) 
    { 
     if (!$this->hasErrors()) { 
      $user = $this->getUser(); 

      if (!$user || !$user->validatePassword($this->pass)) { 
       $this->addError($attribute, 'Wrong login or password.'); 
      } 
     } 
    } 

    /** 
    * Logs in a user using the provided login and password. 
    * @return bool whether the user is logged in successfully 
    */ 
    public function login() 
    { 
     if ($this->validate()) 
     { 
      $user = $this->getUser(); 
      if (!$user->active) 
      { 
       $this->addError('login', 'You account is not active.'); 
       return false; 
      } 
      return Yii::$app->user->login($user, $this->rememberMe ? 3600*24*30 : 0); 
     } 
     return false; 
    } 

    /** 
    * Finds user by [[login]] 
    * 
    * @return User|null 
    */ 
    public function getUser() 
    { 
     if ($this->_user === false) 
     { 
      $this->_user = User::findByLogin($this->login); 
     } 

     return $this->_user; 
    } 
} 

User.php

<?php 


namespace app\models; 

use Yii; 
use yii\base\NotSupportedException; 
use yii\behaviors\TimestampBehavior; 
use yii\db\ActiveRecord; 
use yii\web\IdentityInterface; 

/** 
* User model 
* 
* @property integer $id 
* @property string $login 
* @property string $pass 
* @property string $password_reset_token 
* @property string $email 
* @property string $auth_key 
* @property integer $status 
* @property integer $created_at 
* @property string $password write-only password 
*/ 
class User extends ActiveRecord implements IdentityInterface 
{ 
    const STATUS_DELETED = 0; 
    const STATUS_ACTIVE = 10; 

    /** 
    * @inheritdoc 
    */ 
    public static function tableName() 
    { 
     return '{{%user}}'; 
    } 

    /** 
    * @inheritdoc 
    */ 
    /*public function behaviors() 
    { 
     return [ 
      TimestampBehavior::className(), 
     ]; 
    }*/ 

    /** 
    * @inheritdoc 
    */ 
    public function rules() 
    { 
     return [ 
      ['status', 'default', 'value' => self::STATUS_ACTIVE], 
      ['status', 'in', 'range' => [self::STATUS_ACTIVE, self::STATUS_DELETED]], 
     ]; 
    } 

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

    /** 
    * @inheritdoc 
    */ 
    public static function findIdentityByAccessToken($token, $type = null) 
    { 
     throw new NotSupportedException('"findIdentityByAccessToken" is not implemented.'); 
    } 

    /** 
    * Finds user by login 
    * 
    * @param string $login 
    * @return static|null 
    */ 
    public static function findBylogin($login) 
    { 
     return static::findOne(['login' => $login]); 
    } 

    /** 
    * @inheritdoc 
    */ 
    public function getId() 
    { 
     return $this->getPrimaryKey(); 
    } 

    /** 
    * @inheritdoc 
    */ 
    public function getAuthKey() 
    { 
     return $this->auth_key; 
    } 

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

    /** 
    * Validates password 
    * 
    * @param string $password password to validate 
    * @return bool if password provided is valid for current user 
    */ 
    public function validatePassword($password) 
    { 
     return Yii::$app->security->validatePassword($password, $this->pass); 
    } 

    /** 
    * Generates password hash from password and sets it to the model 
    * 
    * @param string $password 
    */ 
    public function setPassword($password) 
    { 
     $this->pass = Yii::$app->security->generatePasswordHash($password); 
    } 

    /** 
    * Generates "remember me" authentication key 
    */ 
    public function generateAuthKey() 
    { 
     $this->auth_key = Yii::$app->security->generateRandomString(); 
    } 



    public static function findByPasswordResetToken($token) 
    { 

     if (!static::isPasswordResetTokenValid($token)) { 
      return null; 
     } 

     return static::findOne([ 
      'password_reset_token' => $token, 
      'status' => self::STATUS_ACTIVE, 
     ]); 
    } 

    public static function isPasswordResetTokenValid($token) 
    { 
     if (empty($token)) { 
      return false; 
     } 

     $timestamp = (int) substr($token, strrpos($token, '_') + 1); 
     $expire = Yii::$app->params['user.passwordResetTokenExpire']; 
     return $timestamp + $expire >= time(); 
    } 

    public function generatePasswordResetToken() 
    { 
     $this->password_reset_token = Yii::$app->security->generateRandomString() . '_' . time(); 
    } 

    public function removePasswordResetToken() 
    { 
     $this->password_reset_token = null; 
    } 
} 

web.php:

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

セッションがあまりにもデータがないです。しかし、サーバーセッションは正常に動作しています。 ビューテンプレートにはYii :: $ app-> user-> isGuestが常にtrueです。 ?

<?php 

/* @var $this \yii\web\View */ 
/* @var $content string */ 

use yii\helpers\Html; 
use yii\bootstrap\Nav; 
use yii\bootstrap\NavBar; 
use yii\widgets\Breadcrumbs; 
use app\assets\AppAsset; 
use yii\bootstrap\ActiveForm; 
use app\models\LoginForm; 

AppAsset::register($this); 
?> 
<?php $this->beginPage() ?> 
<!DOCTYPE html> 
<html lang="<?= Yii::$app->language ?>"> 
<head> 
    <meta charset="<?= Yii::$app->charset ?>"> 
    <meta http-equiv="X-UA-Compatible" content="IE=edge"> 
    <meta name="viewport" content="width=device-width, initial-scale=1"> 
    <?= Html::csrfMetaTags() ?> 
    <title><?= Html::encode($this->title) ?></title> 
    <?php $this->head() ?> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 
</head> 
<body> 
<?php $this->beginBody() ?> 

<div class="wrap"> 
    <?php 
    NavBar::begin([ 
     'brandLabel' => 'Cupimet', 
     'brandUrl' => Yii::$app->homeUrl, 
     'options' => [ 
      'class' => 'navbar-inverse navbar-fixed-top', 
     ], 
    ]); 
    /*echo Nav::widget([ 
     'options' => ['class' => 'navbar-nav navbar-right'], 
     'items' => [ 
      ['label' => 'Home', 'url' => ['/site/index']], 
      ['label' => 'About', 'url' => ['/site/about']], 
      ['label' => 'Contact', 'url' => ['/site/contact']], 
      Yii::$app->user->isGuest ? (
       ['label' => 'Login', 'url' => ['/site/login']] 
      ) : (
       '<li>' 
       . Html::beginForm(['/site/logout'], 'post') 
       . Html::submitButton(
        'Logout (' . Yii::$app->user->identity->username . ')', 
        ['class' => 'btn btn-link logout'] 
       ) 
       . Html::endForm() 
       . '</li>' 
      ) 
     ], 
    ]);*/ 
?> 
    <div class="navbar-nav navbar-right login-form-head"> 
    <?php 
    if (\Yii::$app->user->isGuest) 
    { 
     $model = new LoginForm; 
     $form = ActiveForm::begin([ 
      'action' => '/site/login', 
      'id' => 'login-form', 
      'layout' => 'inline', 
      'fieldConfig' => [ 
       'template' => "{label}\n<div class=\"col-lg-3\">{input}</div>\n<div class=\"col-lg-8\">{error}</div>", 
       'labelOptions' => ['class' => 'col-lg-1 control-label'], 
      ], 
     ]); 
    ?> 

     <?= $form->field($model, 'login', ['template'=>'{input}<a href="/site/signup" class="regforgetlinx">Регистрация</a>'])->textInput(['placeHolder'=>'Логин']) ?> 


     <?= $form->field($model, 'pass', ['template'=>'{input}<a href="/site/forgotpass" class="regforgetlinx">Забыли пароль?</a>'])->passwordInput(['placeHolder'=>'Пароль']) ?> 


     <div class="form-group"> 
      <div class="col-lg-offset-1 col-lg-11"> 
       <?= Html::submitButton('ВОЙТИ', ['class' => 'btn btn-primary btn-loginhead', 'name' => 'login-button']) ?> 
      </div> 
     </div> 

    <?php 
     ActiveForm::end(); 
    } 
    else 
    { 
    ?> 
     <div>Здравствуйте, <?=Yii::$app->user->login?></div> 
     <div class="form-group"> 
      <div class="col-lg-offset-1 col-lg-11"> 
       <?= Html::submitButton('ВОЙТИ', ['class' => 'btn btn-primary btn-loginhead', 'name' => 'login-button']) ?> 
      </div> 
     </div> 
    <?php 
    } 
    ?> 
    </div> 
    <?php 

    NavBar::end(); 
    ?> 

<div class="container"> 
     <?= Breadcrumbs::widget([ 
      'links' => isset($this->params['breadcrumbs']) ? $this->params['breadcrumbs'] : [], 
     ]) ?> 
     <?= $content ?> 
    </div> 
</div> 

<footer class="footer"> 
    <div class="container"> 
     <p class="text-center">&copy; cupimet Copyright <?= date('Y') ?></p> 

    </div> 
</footer> 

<?php $this->endBody() ?> 
</body> 
</html> 
<?php $this->endPage() ?> 

SiteController.php

<?php 

namespace app\controllers; 

use Yii; 
use yii\filters\AccessControl; 
use yii\web\Controller; 
use yii\web\Response; 
use yii\filters\VerbFilter; 
use app\models\LoginForm; 
use app\models\ContactForm; 
use app\models\SignupForm; 
use app\models\User; 
use yii\helpers\Html; 
use yii\helpers\Url; 

class SiteController extends Controller 
{ 
    /** 
    * @inheritdoc 
    */ 
    public function behaviors() 
    { 
     return [ 
      'access' => [ 
       'class' => AccessControl::className(), 
       'only' => ['logout'], 
       'rules' => [ 
        [ 
         'actions' => ['logout'], 
         'allow' => true, 
         'roles' => ['@'], 
        ], 
       ], 
      ], 
      'verbs' => [ 
       'class' => VerbFilter::className(), 
       'actions' => [ 
        'logout' => ['post'], 
       ], 
      ], 
     ]; 
    } 

    /** 
    * @inheritdoc 
    */ 
    public function actions() 
    { 
     return [ 
      'error' => [ 
       'class' => 'yii\web\ErrorAction', 
      ], 
      'captcha' => [ 
       'class' => 'yii\captcha\CaptchaAction', 
       'fixedVerifyCode' => YII_ENV_TEST ? 'testme' : null, 
      ], 
     ]; 
    } 

    /** 
    * Displays homepage. 
    * 
    * @return string 
    */ 
    public function actionIndex() 
    { 
     return $this->render('index'); 
    } 

    /** 
    * Login action. 
    * 
    * @return Response|string 
    */ 
    public function actionLogin() 
    { 
     if (!Yii::$app->user->isGuest) { 
      return $this->goHome(); 
     } 

     $model = new LoginForm(); 
     if ($model->load(Yii::$app->request->post()) && $model->login()) { 
      return $this->goBack(); 
     } 
     return $this->render('login', [ 
      'model' => $model, 
     ]); 
    } 

    /** 
    * Logout action. 
    * 
    * @return Response 
    */ 
    public function actionLogout() 
    { 
     Yii::$app->user->logout(); 

     return $this->goHome(); 
    } 

    /** 
    * Displays contact page. 
    * 
    * @return Response|string 
    */ 
    /*public function actionContact() 
    { 
     $model = new ContactForm(); 
     if ($model->load(Yii::$app->request->post()) && $model->contact(Yii::$app->params['adminEmail'])) { 
      Yii::$app->session->setFlash('contactFormSubmitted'); 

      return $this->refresh(); 
     } 
     return $this->render('contact', [ 
      'model' => $model, 
     ]); 
    }*/ 

    /** 
    * Displays about page. 
    * 
    * @return string 
    */ 
    /*{ 
     return $this->render('about'); 
    } 

    public function actionAddAdmin() 
    { 
    $model = User::find()->where(['login' => 'admin'])->one(); 
    if (empty($model)) { 
     $user = new User(); 
     $user->login = 'admin'; 
     $user->email = '[email protected]'; 
     $user->setPassword('7777777'); 
     $user->generateAuthKey(); 
     if ($user->save()) { 
      echo 'good'; 
     } 
     print 777; 
    } 
    }*/ 

    public function actionSignup() 
    { 
     $model = new SignupForm(); 

     if ($model->load(Yii::$app->request->post())) { 
      if ($user = $model->signup()) { 
       if (Yii::$app->getUser()->login($user)) { 
        return $this->goHome(); 
       } 
      } 
     } 

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

    /* 
    * Подтверждение подписки. 
    * В качестве GET-параметра принимается код, который сравнивается с тем, что в таблице subscription 
    * в ячейке activation. При успехе - ставится true в ячейку status. 
    */ 
    public function actionActivation(){ 
     $code = Yii::$app->request->get('code'); 
     $code = Html::encode($code); 
     //ищем код подтверждения в БД 
     $find = User::find()->where(['email_confirm_token' => $code])->one(); 
     if($find){ 
      $find->active = 1; 
      if ($find->save()) { 
       $text = '<p>Поздравляем!</p> 
       <p>Ваш e-mail подтвержден и регистрация завершена.</p>'; 
       //страница подтверждения 
       return $this->render('activation', [ 
        'text' => $text 
       ]); 
      } 
     } 

     $absoluteHomeUrl = Url::home(true); 
     return $this->redirect($absoluteHomeUrl, 303); //на главную 
    } 
} 
+0

問題は解決しました。これは、ユーザー表のステータスフィールドが10ではなく0だったためです。 – Peter

+0

@Peter、あなたはあなたの質問をあなたの解決方法に関する情報で更新するか、あなた自身の問題への回答を投稿する必要があります。そうすれば、他の人が役に立つかもしれない – Imtiaz

答えて

0

を誰かが興味を持って、私は、MySQLのユーザーテーブルとフィールドの異なる構造を作成した場合: は誰が間違っているかを知っている ``

main.phpをい「ステータスが」だから、私は10にそれを変更し、問題が解決した0に設定された...

関連する問題