caw*_*coy 8 php hash laravel laravel-4
我正在研究一个旧的PHP应用程序,用户的密码与该md5()功能进行哈希处理.所以密码存储如下:
c0c92dd7cc524a1eb55ffeb8311dd73f
Run Code Online (Sandbox Code Playgroud)
我正在使用Laravel 4开发一个新的应用程序,我需要有关如何在users不丢失密码字段的情况下迁移表的建议.
Ant*_*iro 17
尽可能快地丢失密码字段,但如果您不想冒失去用户的风险,可以在auth方法上执行以下操作:
if (Auth::attempt(array('email' => Input::get('email'), 'password' => Input::get('password'))))
{
return Redirect::intended('dashboard');
}
else
{
$user = User::where('email', Input::get('email'))->first();
if( $user && $user->password == md5(Input::get('password')) )
{
$user->password = Hash::make(Input::get('password'));
$user->save();
Auth::login($user->email);
return Redirect::intended('dashboard');
}
}
Run Code Online (Sandbox Code Playgroud)
每次用户登录时,这基本上都会将密码从md5更改为Hash.
但是你真的必须考虑sendind链接到所有用户,以便他们更改密码.
编辑:
根据@martinstoeckli的评论,为了进一步提高安全性,最好是:
哈希所有当前的md5密码:
foreach(Users::all() as $user)
{
$user->password = Hash::make($user->password);
$user->save();
}
Run Code Online (Sandbox Code Playgroud)
然后使用更简洁的方法更新密码:
$password = Input::get('password');
$email = Input::get('email');
if (Auth::attempt(array('email' => $email, 'password' => $password)))
{
return Redirect::intended('dashboard');
}
else
if (Auth::attempt(array('email' => $email, 'password' => md5($password))))
{
Auth::user()->password = Hash::make($password);
Auth::user()->save();
return Redirect::intended('dashboard');
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4436 次 |
| 最近记录: |