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

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

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

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

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

《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
最佳答案

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

哈哈哈

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

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

4年前 评论

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

4年前 评论

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

哈哈哈

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

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

4年前 评论

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

4年前 评论
JaguarJack

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

4年前 评论

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

4年前 评论
  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
            ]);
4年前 评论

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