Yii2使用者密碼加密後驗證問題

來源:互聯網
上載者:User
使用Yii2架構,密碼欄位為pass,rules中設定的pass長度範圍為6-20;

原密碼為123456789,校正通過沒有問題,hash後存入資料庫,hash後的值肯定超過範圍了。

此時pass欄位值為hash後的值,沒有儲存原密碼,無法復原加密。

當我更新使用者資料的時候

$userInfo = User::findOne(['id'=>1]);$userInfo->last_time = time();//這個時候就會報錯,因為密碼長度不符合要求$userInfo->save(true);

該如何解決這個問題?

現在暫時做的就是修改rules範圍,但是這樣使用者原密碼長度的限制條件也跟著修改了。有沒有更好的解決方案?

回複內容:

使用Yii2架構,密碼欄位為pass,rules中設定的pass長度範圍為6-20;

原密碼為123456789,校正通過沒有問題,hash後存入資料庫,hash後的值肯定超過範圍了。

此時pass欄位值為hash後的值,沒有儲存原密碼,無法復原加密。

當我更新使用者資料的時候

$userInfo = User::findOne(['id'=>1]);$userInfo->last_time = time();//這個時候就會報錯,因為密碼長度不符合要求$userInfo->save(true);

該如何解決這個問題?

現在暫時做的就是修改rules範圍,但是這樣使用者原密碼長度的限制條件也跟著修改了。有沒有更好的解決方案?

可以把從 model::scenarios() 裡定義的 self::SCENARIO_DEFAULT 的值中去掉 password,
從而在default-scenario下不再驗證password

如果你是用的YII2 advanced的話,你可以看下它預設的使用者模型和預設的migration

使用者模型裡的password欄位已經是被定義過了,你無需再次定義。

你把你的password欄位改為password_hash,儲存的時候禁止前端展示和發送password_hash(這個可以在rule控制)並把password這個欄位帶過來,如果password不為空白,則在更新使用者資訊前執行$user->setPassword(Yii::$app->request->post('password'))即可(或者寫在使用者模型的beforeSave方法裡也行)

  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.