2017-09-13 52 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