2017-02-16 104 views
1

我想實現一個使用OpenID的登錄方法,並且$ _SESSION var的正確發佈 - 通過那些我只是試圖在MySQL中註冊用戶。出於某種原因,穿過我的控制器::Yii2 save()使用默認值創建數據庫行

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

    include ('../views/user-record/steamauth/userInfo.php'); 

    $steamid = $_SESSION['steam_steamid']; 
    $username = $_SESSION['steam_personaname']; 
    $profileurl = $_SESSION['steam_profileurl']; 
    $avatar = $_SESSION['steam_avatar']; 
    $avatarmedium = $_SESSION['steam_avatarmedium']; 
    $avatarfull = $_SESSION['steam_avatarfull']; 

    $user = UserRecord::findBySteamId($steamid); 

    if ($user === null) 
    { 
     $user = new UserRecord(); 

     $user->steamid = $steamid; 
     $user->username = $username; 
     $user->profileurl = $profileurl; 
     $user->avatar = $avatar; 
     $user->avatarmedium = $avatarmedium; 
     $user->avatarfull = $avatarfull; 
     $user->verified = 0; 
     $user->banned = 0; 

     $user->save(); 
    } 

    Yii::$app->user->login($user, 604800); 

    return $this->redirect(Yii::$app->user->returnUrl); 
} 

編輯「登錄」操作時:這裏是UserRecord類,忘了將它添加在

<?php 

namespace app\models; 

class UserRecord extends \yii\db\ActiveRecord implements \yii\web\IdentityInterface 
{ 
    public $id; 
    public $steamid; 
    public $username; 
    public $profileurl; 
    public $avatar; 
    public $avatarmedium; 
    public $avatarfull; 

    public $verified; 
    public $banned; 
    public $rank; 
    public $authKey; 

// public $password; 
// public $accessToken; 

    public static function tableName() 
    { 
     return 'users'; 
    } 

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

    public function getId() 
    { 
     return $this->id; 
    } 

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

    public static function findIdentity($id) 
    { 
     return self::findOne($id); 
    } 

    public function validateSteamID($steamid) 
    { 
     return $this->steamid === $steamid; 
    } 

    public static function findIdentityByAccessToken($token, $type = null) 
    { 
     throw new \yii\base\NotSupportedException; 
    } 

    public static function findBySteamId($steamid) 
    { 
     return self::findOne(['steamid' => $steamid]); 
    } 

} 

結果是一個簡單的。張貼行,沒有輸入數據。

任何幫助將不勝感激,謝謝。

+0

你正在使用的定義在你的模態屬性數組中的? – Dani

+0

更新了@Dani謝謝 –

回答

0

如果您在使用公共乏這些覆蓋ActiveRecord的的瓦爾,然後只保存空值重新定義相同的列名..

如果,你必須在你的模型中刪除(redifined)公共瓦爾

否則,如果您有任何規則,那麼

嘗試在您添加安全的屬性模型規則

public function rules() 
{ 
    return [ 
     [['steamid', 'username', 'profileurl', 'avatar', 'avatarmedium', 
       'avatarfull', 'verified', 'banned', 'rank', 'authKey',], 'safe'], 
    ]; 
} 
+0

我這樣做,它仍然發佈SQL默認值,對我來說很奇怪。 –

+0

我已經用一個重要的建議更新了答案。讓我知道 – scaisEdge

0

月laring'public'變量使得save()忽略了發佈的數據。謝謝。