用户表从 ThinkPHP 迁移到 Laravel 时密码的加密方式有变怎么搞?

之前的项目使用的是 thinkphp 框架,用户注册时存储到数据表的密码是使用自定义的方法加密的,加密方法如下:

function encrypt_password($password,$uniqid){
return sha1(md5($password).$uniqid);
}

其中 $uniqid 是一个随机字符串并与加密后的密码一同保存到数据表。
现在我需要将原项目迁移到 laravel 框架下,大家都知道 laravel 的用户密码加密方式为 bcrypt

现在还没有具体的方案完成倒库,也许您能给我一个意见,谢谢。

《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
最佳答案

告诉你一个的方法,换成 laravel 之后,用户登录或者请求需要登录的接口,直接告诉他,需要重新设置一次密码,,,才能继续访问,用户重新设置密码时,就把密码用 bcrypt 加密保存了,,,并设置一个标记,

哈哈哈

5年前 评论
kangfq 5年前
kluo (楼主) 5年前
讨论数量: 8

补充一下,我仍然希望使用 laravel 自带的 bcrypt hasher,现在的关键问题是如何完成倒库并兼容以后的数据。

5年前 评论

那就得做兼容,数据库加字段标识用户是用的哪种加密方式,然后就用对应的方法验证。

5年前 评论

告诉你一个的方法,换成 laravel 之后,用户登录或者请求需要登录的接口,直接告诉他,需要重新设置一次密码,,,才能继续访问,用户重新设置密码时,就把密码用 bcrypt 加密保存了,,,并设置一个标记,

哈哈哈

5年前 评论
kangfq 5年前
kluo (楼主) 5年前

可以继续使用 你原来的加密方式, 不一定分要使用 laravel 的,反正我做的登陆都是auth::login() 来实现自定义; 还有如果硬件设备升级,可能会导致 所有密码错误; 加盐 的方式,做少做到了 程序可控。

5年前 评论

偷偷告诉你,TP6 的性能比较高点

5年前 评论
JaguarJack

不如还是沿用 tp 的,用户多的话,迁移成本太大了

5年前 评论

tp好像现在和laravel 大部分功能没什么区别了吧 框架都在迈入新纪元了 :joy:

5年前 评论
  1. TP表不动原封不动导入到现在有项目库 ,
  2. 现有用户表导入TP的用户信息密码随机, 然后给个标识有没有初始化
  3. 用户登陆判断初始化标识有没有变化,没有 验证走TP表做为验证,并且把用户输入的密码bcrypt 到现有用户表,更改初始化标识,当用户下一次登陆的时候就走现有表了.
if ($user->init == 1) {
            if (!Hash::check($validatedData['password'], $user->password)) {
                return $this->error('用户名或密码错误');
            }
        } else {
            $h_company = H_Company::query()->where('phone', '=', $user->phone)->first();
            if ($h_company) {
                if ($h_company->password !== md5(md5($validatedData['password']))) {
                    return $this->error('用户名或密码错误');
                }
            } else {
                if (!Hash::check($validatedData['password'], $user->password)) {
                    return $this->error('用户名或密码错误');
                }
            }
            // 过度密码
            $user->update([
                'password' => Hash::make($validatedData['password']),
                'init'     => 1
            ]);
5年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!