来自旧symfony系统的user表有以下列:
email | algorithm | salt | password
--------------------+-------------+-----------------------------------+-------------
techytimo@gmail.com | sha1 | ea579e44dd150e5ba6680d6a3cee26b4 | f48598ad17acf18583d8499d7c6abc430929ae49我用laravel 4创建的新系统包含以下列:
email | password
--------------------+-----------------------------------------------------------
techytimo@gmail.com | $2y$08$Zz3rVIW4qJFd5IdTfzpw3OrH0HxGO8BrBxfonIQCvU33/yWQkUAe如何在不让用户再次注册的情况下,将具有密码的3000帐户从旧系统导入到新系统?
另外,用相同格式的laravel 4加密我的密码也会有帮助。
发布于 2013-08-13 09:27:32
一个解决办法是在Laravel中扩展Auth模块,从Symfony实现您的散列解决方案。
重写Auth::attempt(),以您想要的方式散列您的密码,将起作用。
同样,对于Hash::X,您必须在Auth类中重写一个函数,以同样的方式散列新用户密码。
如何实现哈希方法:
在文件夹名为ServiceProvider 的应用程序中创建一个库,然后创建您的:
libraries\SymfonyHasherServiceProvider.php
use Illuminate\Support\ServiceProvider;
class SymfonyHasherServiceProvider extends ServiceProvider {
public function register()
{
$this->app->bind('hash', function()
{
return new SymfonyHasher;
});
}
}然后,创建hasher,这将是Symfony散列方法的副本:
libraries\SymfonyHasher.php
class SymfonyHasher implements Illuminate\Hashing\HasherInterface {
public function make($value, array $options = array())
{
/* make your hash here */
}
public function check($value, $hashedValue, array $options = array())
{
return $hashedValue == $this->make($value);
}
}将'Illuminate\Hashing\HashServiceProvider'替换为'SymfonyHasherServiceProvider'在app.php config中的服务提供者数组中,然后将'app/libraries'添加到composer.json中的autoload类映射中
我不知道Symfony是如何制作散列的,所以您必须搜索Symfony如何根据需要实现散列。
发布于 2013-10-16 08:49:16
公式:
Hash::make(encryptFunc('password'))==Hash::make(encrypted_password);
在Auth::尝试之前,将$userdata设置为:
$userdata = [
'username' => Input::get('username'),
'password' =>your_sha1_salt_function(Input::get('password'))
];在你的user.php里
public function getAuthPassword()
{
return Hash::make($this->password);
}在Auth::尝试将执行哈希::检查类似:Hash::check(your_sha1_salt_function(Input::get('password')),哈希::make($this->)
这样,您就不需要创建新的提供程序并更改配置。
https://stackoverflow.com/questions/18204299
复制相似问题