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

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

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