Rails authlogic密码哈希算法仅使用ruby

时间:2010-02-25 01:37:41

标签: ruby-on-rails ruby authlogic

有没有人知道如何在不使用rails的情况下通过authlogic hasing算法运行纯文本密码?看起来authlogic的默认值是sha512。

我有一个纯文本密码数据库(是的,我知道......很糟糕),需要将它们导入到使用authlogic设置的新数据库中。

这个ruby脚本在rails之外,所以我不想使用基于rails的authlogic命令。

我有

  

要求'authlogic'

ruby脚本中的

我是ruby模块的新手,但是尝试调用密码方法,如:

  

Authlogic :: ActsAsAuthentic:密码::方法:: InstanceMethods.password( 'password_here')

我从中得到了“无密码方法”错误,但在authlogic代码中的模块堆栈下面有一个“密码”方法。

谢谢!

3 个答案:

答案 0 :(得分:3)

我不会尝试直接导入它们,因为记住你可能也需要创建“盐”。您应该为每个当前的用户创建一个全新的“用户”:

User.create({:username => username, :email => email, :password => password, :password_confirmation => password })

这样你会知道它正在按照authlogic的意图去做。只要您的用户模型使用authlogic,它就会使用authlogic的方法来保存密码。

答案 1 :(得分:1)

您可以使用

transition_from_crypto_providers
Authlogic的

选项。

从文档中引用

  

假设您最初是加密的   你的密码与Sha1。 Sha1是   开始加入MD5的聚会   你想切换到什么东西   更强。没问题,只需指定   你的新算法和改进的算法   crypt_provider选项然后让   Authlogic知道你正在转型   来自Sha1使用此选项。 Authlogic   会照顾好一切,   包括将用户转换为   新算法。下一次   用户登录后,将被授予   使用旧算法访问和   他们的密码将被重新保存   新算法。所有新用户都会   显然使用新算法   好。

这样您就可以使用现有密码导入旧用户,并在用户登录时更新。

当然,如果您只想使用Authlogic中的加密方法,而不需要任何Rails内容,只需复制代码即可。 http://github.com/binarylogic/authlogic/blob/master/lib/authlogic/crypto_providers/sha512.rb

答案 2 :(得分:0)

注意上面的答案: 一定要使用脚本/控制台,然后:

load 'ruby_script.rb'

运行它。 我试图让这个与irb一起工作,当然这不起作用。