2017-09-13 79 views
0

我有我的身份驗證的用戶,並進行調試,我試圖用解密(因爲它是用encrypt()加密,以顯示自己的密碼。Laravel decrypt()拋出「DecryptException負載無效。」

爲了簡化問題,我創建了一個新的途徑/test,我可以看到加密的密碼經過身份驗證的用戶,像這樣的:

Route::get('/test', function() { 
    dd(Auth::user()->password) 
}); 

這將返回我:$2y$10$gdhYnCekBownWU62OitC6uSwoONfDWGO23FnaVwIgFPAeJI9L6DEa


但是,如果我嘗試使用,它拋出我這個錯誤:

Route::get('/test', function() { 
    dd(decrypt(Auth::user()->password)) 
}); 

DecryptException: The payload is invalid.


我想對這個問題摸索,兩件事情我發現是:

1) 「確保應用程序的關鍵是正確的。」它之前在那裏,但可以肯定的是,我再次運行php artisan key:generate。什麼也沒有變。

2)「這是一個CSRF問題」。我在web中禁用了中間件內核的csrf,也沒有任何改變。而且我沒有使用發佈請求,所以我懷疑這是我的問題。


我需要它,因爲該方案是這樣的:我需要解密密碼,因爲我事先用這種方法生成一個隨機密碼,並將其保存到數據庫中;我想保持這種方式。

$randomPassword = rand(111111,999999); 
$user->password = encrypt($randomPassword); 
$user->save(); 

有誰知道這是什麼原因或如何克服它?

回答

2

You can't (link)。密碼未加密,它們被散列。這是一種方式,一旦被散列,它就不能被散列。

你想要做的是應該避免的事情。我想不出任何需要解密用戶密碼的用例。我想你需要想出一個新的策略,也許從用戶得到一個密碼,如:lastname/yearofbirth

+0

感謝信息的人。顯然,我需要考慮一個新的策略。 – senty

+1

不用擔心隊友,樂意幫忙!想讓它成爲回答? – Kingsley