2017-02-16 2 views
1

OpenIDを使用してログインメソッドを実装しようとしていますが、$ _SESSION varが正しく投稿されています。これらを介して、MySQLでユーザーを登録しようとしています。何らかの理由で、私のコントローラ::Yii2 save()既定値でDB行を作成する

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

EDITの「ログイン」アクションを通過するとき:ここ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

あなたのモデルで、これはあなたが(redifined)公共VARSを削除する必要がある場合

..だけ空の値を保存しているこれらその後、ActiveRecordのためのVARSをオーバーライドし、VARS publicを使用して、同じ列名を再定義している場合

あなたは何のルールを持っていないそうでないならば、

てみてください、あなたに属性で安全な追加モデルルール

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

私はこれを行いましたが、それでも私は非常に奇妙なSQLデフォルト値を投稿しています。 –

+0

私は重要な提案で答えを更新しました。私に教えてください – scaisEdge

0

12月'public'変数を明示すると、save()は投稿されるデータを無視します。ありがとう。

関連する問題