我想在this post之后在Laravel 4(这里是Whirlpool,但我的问题不是Hash相关)中实现另一个hasher。
我的项目的不同之处在于我在文件夹和命名空间中创建了我的服务:
Laravel
|-- app
| |-- config
| | +-- app.php
| |
| |-- controllers
| | +-- UserController.php
|
|-- lib
| +-- Max13
| +-- Services
| +-- Hash
| |-- WhirlpoolHasher.php
| +-- WhirlpooHashServiceProvider.php
|
|-- start
| +-- global.php
|
+-- composer.json
以下是每个文件的相关摘录:
composer.json:
[...]
"autoload": {
"classmap": [
[...]
"app/lib",
]
}
[...]
应用/配置/ app.php:
<?php
return array(
[...]
'providers' => array(
[...]
'Illuminate\Workbench\WorkbenchServiceProvider',
'Max13\Services\Hash\WhirlpoolHashServiceProvider',
),
[...]
);
应用/控制器/ UserControllers.php:
<?php
class UserController extends BaseController
{
/**
* Treat GET methods.
*
* @return Response
*/
public function getUser()
{
if (Input::has('username', 'password')) {
$username = Input::get('username');
$password = Hash::make(Input::get('password'));
Response::json($password);
} else {
return 'unknown';
}
}
}
LIB / Max13 /服务/散列/ WhirlpoolHasher.php:
<?php namespace Max13\Services\Hash;
class WhirlpoolHasher implements \Illuminate\Hashing\HasherInterface
{
public function make($value, array $options = array())
{
$hash = hash('whirlpool', $value);
if ($hash === null) {
throw new \RuntimeException("Wirlpool hashing not supported.");
}
return $hash;
}
public function check($value, $hashedValue, array $options = array())
{
return strcasecmp($this->make($value), $hashedValue) === 0;
}
public function needsRehash($hashedValue, array $options = array())
{
return ctype_alnum($hashedValue) && strlen($hashedValue) === 128;
}
}
LIB / Max13 /服务/散列/ WhirlpoolHashServiceProvider.php:
<?php namespace Max13\Services\Hash;
class WhirlpoolHashServiceProvider extends \Illuminate\Support\ServiceProvider
{
public function register()
{
$this->app['hash'] = $this->app->share(function () {
return new WhirlpoolHasher();
});
}
public function provides()
{
return array('hash');
}
}
我认为我已经完成了所有事情(我没有忘记php composer dump-autoload
),我没有任何错误但是当我在/user?username=foo&password=bar
查询我的网站时,我得到了{{1} hash(60个字符,Bcrypt
是128)。有谁知道我错过了什么?
答案 0 :(得分:1)
从config / app.php中删除laravel的默认'Illuminate\Hashing\HashServiceProvider',
提供程序(第93行),你应该很高兴。
答案 1 :(得分:0)
我试图实现自己的哈希,我会说你的描述是很好的指导。不幸的是我花了很多时间
'Class 'FooHasherServiceProvider' not found'
'Call to undefined method Illuminate\Support\Facades\Hash::check()'
并且无法弄明白。因此,对于将来解决问题的人,必须运行
composer dump-autoload
编辑classmap
中的composer.json
后。