2013-10-13 16 views
0

Laravel在用戶表中需要至少60個字符的密碼字段。遷移到laravel中斷用戶表上的密碼字段,該字段長度爲32個字符

我們的舊模式有32個字符,並且產品中的所有現有密碼在加密後都是32個字符或更少。

將數據庫字段遷移到60個字符後,如果我們切換到laravel,則舊密碼無法驗證。

我們絕對可以提示用戶重置密碼,但我們必須先能夠驗證它們。這是一個問題。

我們該如何處理?尋找一些想法。

回答

1

您的舊系統和laravel正在使用不同的哈希方法。

如果您的舊系統有32個字符,可能是md5散列。

要將舊用戶轉換爲laravel的散列,您首先必須使用舊密碼登錄該用戶。登錄時,你必須使用舊的哈希系統(md5或其他,以及鹽)。用戶使用舊的哈希系統成功登錄後,請求他們重置密碼。現在,當你重新設置他們的舊密碼,使用Larvel的散列系統Hash::make()

你可以按照下面的步驟:

  1. 更改數據庫結構。將password列重命名爲old_password
  2. 在登錄過程中,檢查用戶列old_password是否爲空。如果它不是空的,那麼你必須使用舊的哈希方法來驗證用戶。使用old_password列作爲用戶的密碼。
  3. 一旦此用戶使用舊密碼登錄並且登錄成功,您可以爲該密碼創建一個新的散列並將其存儲在password列中。然後刪除old_password列中的值。通過這種方式,您將爲用戶生成新的正確哈希,而無需用戶甚至意識到(無需他手動重置密碼)。
  4. 一旦您認爲所有用戶都重置了密碼,您可以從數據庫表中刪除old_password列。

另一種方法是爲所有用戶生成隨機密碼。當他們嘗試登錄時填寫失敗,然後他們可以使用他們的電子郵件地址重置密碼。