2016-06-05 19 views
1

Ich versuche zu speichern ($ user-> save();) das Access-Token zu meiner Benutzertabelle für die spätere Verwendung. aber aus irgendeinem Grund spart es nicht auf meinem Tisch.Authentifizierung Klasse werde ich nicht in das Benutzermodell speichern

hier ist mein Controller

<?php 

namespace api\controllers; 

use Yii; 
use yii\rest\ActiveController; 
use yii\filters\auth\CompositeAuth; 
use yii\filters\auth\HttpBasicAuth; 
use yii\filters\auth\QueryParamAuth; 
use common\models\Authentication; 

class AuthenticationController extends ActiveController 
{ 
    public $modelClass = 'common\models\Authentication'; 

    public function actionGrantAuthentication() 
    { 

     $access_token = null; 

     $message = array(); 

     if (Yii::$app->request->post()) { 

      if (!Yii::$app->user->identity || !Yii::$app->user->identity || Yii::$app->user->isGuest) { 

       $username = isset(Yii::$app->request->post()['username']) && Yii::$app->request->post()['username'] ? Yii::$app->request->post()['username'] : null; 

       $password = isset(Yii::$app->request->post()['password']) && Yii::$app->request->post()['password'] ? Yii::$app->request->post()['password'] : null; 

       if ($username && $password) { 
        $user = Authentication::findOne(['username' => $username, 'password_hash' => $password]); 

        if ($user) { 
         //log this user in if the identity is verified 
         Yii::$app->user->login($user); 

         $user->access_token = Yii::$app->security->generateRandomString(); 

         $user->auth_key = "djfskdjh"; 

         $user->save(); 

         $message[] = $user; 

        } else { 
         //add error message 
         $message[] = "Wrong login credentials"; 
        } 

       } else { 
        $message[] = "Must provide username and password"; 
       } 
      } else { 
       $message[] = "you are already logged in"; 
      } 
     } 


     return $message; 

    } 

} 

hier ist mein Authentifizierungsmodell

<?php 
namespace common\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 $username 
* @property string $password_hash 
* @property string $password_reset_token 
* @property string $email 
* @property string $auth_key 
* @property integer $status 
* @property integer $created_at 
* @property integer $updated_at 
* @property string $password write-only password 
*/ 
class Authentication 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.'); 
     return static::findOne(['access_token' => $token]); 
    } 

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


    /** 
    * Finds user by password reset token 
    * 
    * @param string $token password reset token 
    * @return static|null 
    */ 
    public static function findByPasswordResetToken($token) 
    { 
     if (!static::isPasswordResetTokenValid($token)) { 
      return null; 
     } 

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

    /** 
    * Finds out if password reset token is valid 
    * 
    * @param string $token password reset token 
    * @return boolean 
    */ 
    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(); 
    } 

    /** 
    * @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 boolean if password provided is valid for current user 
    */ 
    public function validatePassword($password) 
    { 
     return Yii::$app->security->validatePassword($password, $this->password_hash); 
    } 

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

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

    /** 
    * Generates new password reset token 
    */ 
    public function generatePasswordResetToken() 
    { 
     $this->password_reset_token = Yii::$app->security->generateRandomString() . '_' . time(); 
    } 

    /** 
    * Removes password reset token 
    */ 
    public function removePasswordResetToken() 
    { 
     $this->password_reset_token = null; 
    } 
} 

hier meine Tabelle

enter image description here

Antwort

1

Tipically, wenn ein Modell in der DB nicht diese gespeichert bezieht sich auf das Validierungsproblem.

können Sie versuchen, für

mit dem Debuggen
 $user->save(false); //this disable the validation rules for user 

Dann wird der Benutzer i in db gespeichert Sie sollten für die Gültigkeitsregel suchen,

scheitern

Sie in diesem Leitfaden für einige suggetion für immer die aussehen kann Validierungsfehler

http://www.yiiframework.com/doc-2.0/guide-input-validation.html

if ($user->validate()) { 
    // all inputs are valid 
    $user->save() 
} else { 
    // validation failed: $errors is an array containing error messages 
    $errors = $model->errors; 
    var_dump($errors); 
} 
+0

versuchte ich, dass aber its me „typ geben e ":" yii \\ base \\ UnknownPropertyException " – Autolycus

+0

Sie haben einen Spaltentyp, der in der Tabelle (oder im Modell/Interface) nicht vorhanden ist? überprüfen Sie bitte .. – scaisEdge

+0

Ich bin sehr, sehr neu zu yii .... Ich bin nicht sicher, was zu suchen :( – Autolycus