2017-02-16 106 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()忽略了发布的数据。谢谢。