有人把数据从 Discuz 导入到 Vanilla 中过吗?

比如用户名,密码什么的?怎么把数据迁移过来呢?有没有什么好的方式?

此话题使用的标签:

回复

  • 最起码得用户名,密码,email导入过来啊....不知道他们的密码加密方式一样吗?

  • vanilla的加密方式可以自定义的,可以把Discuz的密码验证方式迁移过来

    迁移貌似没有什么现成的方案,得自己探索下,可惜我对Discuz不是很熟

  • @chuck911 多谢提供思路!明天我去琢磨琢磨~

  • edited 2013年01月31日

    Discuz 是这样的:

    登陆输入 password

    两次加密,MD5(MD5(password)+salt),得到的值存于 pre_ucenter_members 表 password 字段中,salt 的值(随机)也存在这个表里面的。
    但是表 pre_common_member 里面也有 password 字段,跟上面的值不一样,这是啥?
    Vanilla 所有的 salt 的值就是 Vanilla 吗?

  • edited 2013年01月31日

    @chuck911 这里只有这一种方法吗——把 Discuz 密码验证方式迁移过来?能不能转换什么的嘛? vanilla 的密码验证文件在哪里呢?

  • 你看下这个文件,https://github.com/vanillaforums/Garden/blob/master/library/core/class.passwordhash.php
    里面已经预置了很多系统的密码验证方式,扩展里面的CheckPassword方法就可以了,验证方式对应数据库User表里面的HashMethod字段。

    因为密码hash是不可逆的,你没办法把hash还原成原来的密码,除非暴力匹配。所以只有把验证方法迁移过来

  • case 'phpbb': require_once(PATH_LIBRARY.'/vendors/phpbb/phpbbhash.php'); $Result = phpbb_check_hash($Password, $StoredHash); break;

    如果麻烦,可以学习这种方式,直接把带有Discuz的密码验证函数的文件放在vendors文件夹里引用一下

  • edited 2013年01月31日

    @chuck911 这里有个困难啊,这个函数没有把对应用户的存储于Users表中的Salt传递过来:

    function CheckPassword($Password, $StoredHash, $Method = FALSE, $Username = NULL)

    它仅仅校验利用Password算出来的Hash值与已存储的Hash值是否相等。难道要修改这个函数吗?

  • @chuck911 ~_~ 我错了..可以用 Username从库里查出Salt....

  • edited 2013年01月31日

    @chuck911 我手动增加了一个简单的函数CheckDiscuz: function CheckDiscuz($Password, $StoredHash, $Username) { $User = Gdn::UserModel()->GetByUsername($Username); $Salt=$User->Salt; $CalcHash=md5(md5($Password).$Salt); return $StoredHash == $CalcHash; }

    为啥有的用户可以正常登陆,有的用户不行呢?是因为 GetByUsername 函数不能这样用吗?

  • salt是你自己加进去的字段?

  • 它自带的导入方法都是吧salt和hash一起放在Password字段,用冒号隔开的

    例如这个
    case 'mybb': $Parts = explode(':', $StoredHash, 2); $Hash = GetValue(0, $Parts); $Salt = GetValue(1, $Parts); $ComputedHash = md5(md5($Salt).$Password); $Result = $ComputedHash == $Hash; break;

  • @chuck911 这个方法好啊,我这搞麻烦了,而且调用过来Username经常空的.....

  • 终于好了..^_^

  • @test 哈,终于好了。有空可以发帖分享一下经验啊

  • @chuck911 其实还有好多问题,我的方法好麻烦,我是先备份了Vanilla,然后再在备份的基础上添加数据,而且我只导出了用户名,密码跟 Email,其他的Meta内容都没弄呢。

  • @test 嗯,其他的主要是数据库读写了嘛,可能麻烦点,但是没有什么突出的难点了。加油哈!

登录注册 才能回复。