我花了很多时间才在 Laravel 5.6 中发生类似的事情,但这个线程非常宝贵。接受的答案让您非常接近,但沿途仍然有一些伏击(如评论中所见),因此与其为评论而苦苦挣扎,我认为将其作为答案提出对其他人会有所帮助。
就我而言,我需要访问现有数据库并且无法更改用户文件。密码以 SHA256 格式保存,并应用了哈希密钥。所以我的目标是真正让检查功能正常工作。
我对 Laravel 真的很陌生,我知道会有更好的方法解决这个问题,但我无法app\Libraries
注册该区域,所以我将SHAHasher.php和SHAHashServiceProvider.php都放入app\Providers
其中,我认为这是某种 Laravel亵渎神明,但这是我让它发挥作用的唯一方法。:)
我采取的步骤(劫持rmobis对 Laravel 4 的出色回答)是:
Laravel 需要访问原始应用程序中使用的哈希键,所以我将其添加到.env
.
.env
...
HASH_KEY=0123_key_code_added_here_xyz
应用程序/Providers/SHAHasher.php
namespace App\Providers;
use Illuminate\Contracts\Hashing\Hasher;
class SHAHasher implements Hasher
{
/**
* Get information about the given hashed value.
* TODO: This was added to stop the abstract method error.
*
* @param string $hashedValue
* @return array
*/
public function info($hashedValue)
{
return password_get_info($hashedValue);
}
/**
* Hash the given value.
*
* @param string $value
* @return array $options
* @return string
*/
public function make($value, array $options = array())
{
// return hash('sha1', $value);
// Add salt and run as SHA256
return hash_hmac('sha256', $value, env('HASH_KEY'));
}
/**
* Check the given plain value against a hash.
*
* @param string $value
* @param string $hashedValue
* @param array $options
* @return bool
*/
public function check($value, $hashedValue, array $options = array())
{
return $this->make($value) === $hashedValue;
}
/**
* Check if the given hash has been hashed using the given options.
*
* @param string $hashedValue
* @param array $options
* @return bool
*/
public function needsRehash($hashedValue, array $options = array())
{
return false;
}
}
app/Providers/SHAHashServiceProvider.php
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
class SHAHashServiceProvider extends ServiceProvider {
/**
* Register the service provider.
*
* @return void
*/
public function register() {
$this->app->singleton('hash', function() {
return new SHAHasher();
});
}
/**
* Get the services provided by the provider.
*
* @return array
*/
public function provides() {
return array('hash');
}
}
应用程序/配置/app.php
删除或注释掉// Illuminate\Hashing\HashServiceProvider::class,
添加App\Providers\SHAHashServiceProvider::class,
我不需要注册用户(只允许他们使用现有的登录名进入),所以我只测试了它的访问权限。我不确定为什么应用程序/库区域不会占用。我收到一个错误
Class 'SHAHashServiceProvider' not found
当我运行composer dump-autoload
命令直到我将两者都移到应用程序/提供程序中时。
希望这有助于其他试图让分析器在 Laravel 5 中工作的人。