YiiFramework Аутентификация

Европа - быстрые серверы на дисках NVMe от $5 / Русский датацентр от 199руб

Тема в разделе "Yii Framework", создана пользователем ZERO_A, 20 мар 2018.

  1. ZERO_A

    ZERO_A Новичок

    Сообщения:
    2
    Ваш город:
    Новосибирск, Россия
    Address:
    Novosibirsk, Russia
    Country:
    Location on Map:
    Приветствую, пытаюсь сделать аутентификация ,но странный баг (Когда логинюсь) появляется куки _identy и удаляется сразу же и соответсвенно аутентификация слетает.
    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;



        
    /**
         * @return array the validation rules.
         */
        
    public function rules()
        {
            return [
                
    // username 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'Incorrect username or password.');
                }
            }
        }

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

        
    /**
         * Finds user by [[login]]
         *
         * @return User|null
         */
        
    public function getUser()
        {
            return 
    UserModel::findIdentity($this->login);
        }
    }
    PHP:
    <?php

    namespace app\models;

    use 
    Yii;
    use 
    yii\web\IdentityInterface;
    use 
    yii\db\ActiveRecord;

    /**
     * This is the model class for table "aza_users".
     *
     * @property int $id
     * @property string $login
     * @property string $pass
     * @property string $email
     * @property string $name
     */




    class UserModel extends  ActiveRecord  implements IdentityInterface
    {
        
    /**
         * @inheritdoc
         */
        
    public static function tableName()
        {
            return 
    'aza_users';
        }


        
    /**
         * Finds an identity by the given ID.
         *
         * @param string|int $id the ID to be looked for
         * @return IdentityInterface|null the identity object that matches the given ID.
         */
        
    public static function findIdentity($login)
        {
            return static::
    findOne(['login' => $login]);
        }

        
    /**
         * Finds an identity by the given token.
         *
         * @param string $token the token to be looked for
         * @return IdentityInterface|null the identity object that matches the given token.
         */
        
    public static function findIdentityByAccessToken($token$type null)
        {
            return static::
    findOne(['access_token' => $token]);
        }

        
    /**
         * @return int|string current user ID
         */
        
    public function getId()
        {
            return 
    $this->id;
        }

        
    /**
         * @return string current user auth key
         */
        
    public function getAuthKey()
        {
           
    // return $this->auth_key;
        
    }

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



        public function 
    validatePassword($password)
        {
            return 
    Yii::$app->getSecurity()->validatePassword($password,$this->pass);
        }

        public static function  
    SingUp ($model)
        {
            
    $RegUser=new UserModel();
            
    $RegUser->login=$model->login;
            
    $RegUser->passYii::$app->getSecurity()->generatePasswordHash($model->pass);
            
    $RegUser->email=$model->email;
            
    $RegUser->name$model->name;
            
    //$RegUser->auth_key=crypt($model->name,$model->login);
            
    return  $RegUser->save();
        }





    }
    PHP:
    <?php

    namespace app\controllers;

    use 
    Yii;
    use 
    yii\filters\AccessControl;
    use 
    yii\web\Controller;
    use 
    yii\filters\VerbFilter;
    use 
    app\models\LoginForm;
    use 
    app\models\RegForm;

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


        public function 
    actionReg()
        {
            
    $model = new RegForm();
            if (
    $model->load(Yii::$app->request->post()) && $model->Reg()) {
                return 
    $this->goHome();
            }
            return 
    $this->render('RegForm', [
                
    'model' => $model,
            ]);
        }



        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->goHome();
            }

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


        public function 
    actionLogout()
        {
            
    Yii::$app->user->logout();

            return 
    $this->goHome();
        }

    }


    PHP:
    <?php

    $params 
    = require __DIR__ '/params.php';
    $db = require __DIR__ '/db.php';

    $config = [
        
    'id' => 'basic',
        
    'basePath' => dirname(__DIR__),
        
    'bootstrap' => ['log'],
        
    'aliases' => [
            
    '@bower' => '@vendor/bower-asset',
            
    '@npm'   => '@vendor/npm-asset',
        ],
        
    'components' => [
            
    'request' => [
                
    // !!! insert a secret key in the following (if it is empty) - this is required by cookie validation
                
    'cookieValidationKey' => 'WV0bvWlke2P_t5g9vKkwFpOxa31poFmm',
            ],
            
    'cache' => [
                
    'class' => 'yii\caching\FileCache',
            ],
            
    'user' => [
                
    'identityClass' => 'app\models\UserModel',
                
    'enableAutoLogin' => true,
            ],
            
    'errorHandler' => [
                
    'errorAction' => 'site/error',
            ],
            
    'mailer' => [
                
    'class' => 'yii\swiftmailer\Mailer',
                
    // send all mails to a file by default. You have to set
                // 'useFileTransport' to false and configure a transport
                // for the mailer to send real emails.
                
    'useFileTransport' => true,
            ],
            
    'session' => [
                
    'class' => 'yii\web\DbSession',
            ],
            
    'log' => [
                
    'traceLevel' => YII_DEBUG 0,
                
    'targets' => [
                    [
                        
    'class' => 'yii\log\FileTarget',
                        
    'levels' => ['error''warning'],
                    ],
                ],
            ],
            
    'db' => $db,
            
    /*'urlManager' => [
                'enablePrettyUrl' => true,
                'showScriptName' => false,
                'rules' => [
                    ''=>'site/index',
                    '<action>'=>'site/<action>',
                ],
            ],*/
        
    ],
        
    'params' => $params,
    ];

    if (
    YII_ENV_DEV) {
        
    // configuration adjustments for 'dev' environment
        
    $config['bootstrap'][] = 'debug';
        
    $config['modules']['debug'] = [
            
    'class' => 'yii\debug\Module',
            
    // uncomment the following to add your IP if you are not connecting from localhost.
            //'allowedIPs' => ['127.0.0.1', '::1'],
        
    ];

        
    $config['bootstrap'][] = 'gii';
        
    $config['modules']['gii'] = [
            
    'class' => 'yii\gii\Module',
            
    // uncomment the following to add your IP if you are not connecting from localhost.
            //'allowedIPs' => ['127.0.0.1', '::1'],
        
    ];
    }

    return 
    $config;
     
  2. ZERO_A

    ZERO_A Новичок

    Сообщения:
    2
    Ваш город:
    Новосибирск, Россия
    Address:
    Novosibirsk, Russia
    Country:
    Location on Map:
    Удалось починить, мб кому нибудь пригодиться...

    UserModel
    Код:
    public static function findIdentity($id) {     return static::findOne($id); }
    To
    Код:
    public static function findIdentity($id) {     return static::findOne(['id' => $id]); }
    Add
    Код:
    /** * Finds users by login * * @param string $login * @return static|null */ public static function findByUserLogin($login) {     return static::findOne(['login' => $login]); }
    
    LoginForm
    Код:
    public function getUser() {     return UserModel::findIdentity($this->login); }
    To
    Код:
    public function getUser() {     return UserModel::findByUserLogin($this->login); }
     
  3. grigori

    grigori ( ͡° ͜ʖ ͡°) Команда форума

    Сообщения:
    7.086
    Ваш город:
    Stormwind
    Address:
    Scottsdale, United States
    Country:
    Location on Map:
    ну да, документацию по сигнатурам методов ORM стоит смотреть, интуитивности там нет, старый китаец писал ActiveRecord в одно рыло бессонными ночами лет 10 назад, взяв за пример ruby on rails, и так же в 2ку переписал
    он там себя непризнанным гением считает - слава богу, хоть писать перестал :)
     
  4. fixxxer

    fixxxer К.О. Партнер клуба

    Сообщения:
    12.954
    Ваш город:
    Moscow, Russia
    Address:
    Moscow, Russia
    Country:
    Location on Map:
    Yii - древнее китайское слово, примерно означающее "я не осилил Symfony".
     
    WMix нравится это.
  5. Adelf

    Adelf Laravel&PhpStorm Команда форума

    Сообщения:
    3.347
    Ваш город:
    Казань
    Address:
    Kazan, Russia
    Country:
    Location on Map:
    @fixxxer, судя по всему, laravel также переводится :) с какого-нибудь индейского
     
    fixxxer нравится это.