使用Yii2框架,密碼字段為pass,rules中設定的pass長度范圍為6-20;原密碼為123456789,校驗通過沒有問題,hash后存入數據庫,hash后的值肯定超過范圍了。此時pass字段值為hash后的值,沒有保存原密碼,不可逆加密。當我更新用戶數據的時候$userInfo = User::findOne(['id'=>1]);
$userInfo->last_time = time();//這個時候就會報錯,因為密碼長度不符合要求$userInfo->save(true);該如何解決這個問題?現在暫時做的就是修改rules范圍,但是這樣用戶原密碼長度的限制條件也跟著修改了。有沒有更好的解決方案?
2 回答

心有法竹
TA貢獻1866條經驗 獲得超5個贊
如果你是用的YII2 advanced
的話,你可以看下它默認的用戶模型和默認的migration
。
用戶模型里的password
字段已經是被定義過了,你無需再次定義。
你把你的password
字段改為password_hash
,保存的時候禁止前端展示和發送password_hash
(這個可以在rule控制)并把password
這個字段帶過來,如果password
不為空,則在更新用戶信息前執行$user->setPassword(Yii::$app->request->post('password'))
即可(或者寫在用戶模型的beforeSave
方法里也行)

幕布斯6054654
TA貢獻1876條經驗 獲得超7個贊
可以把從 model::scenarios()
里定義的 self::SCENARIO_DEFAULT 的值中去掉 password,
從而在default-scenario下不再驗證password
- 2 回答
- 0 關注
- 1239 瀏覽
添加回答
舉報
0/150
提交
取消