微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

ruby-on-rails – 带有tr的SecureRandom字符串翻译显示下划线丰富?

我正在使用Devise并尝试使用Devise.friendly_token来生成密码,但却发现它产生了不需要的特殊字符.我发现Devise.friendly_token实际上使用了这个方法

SecureRandom.urlsafe_base64(15).tr('lIO0','sxyz')

试图删除“ – ”,“=”和“_”的特殊字符,我用以下代码替换了Devise.friendly_token调用

SecureRandom.urlsafe_base64(15).tr('lIO0=-_','sxyzEMU')

但是,我发现有一个过多的“U”字符,取代了下划线(显然其中一些实际上是“U”).所以,我尝试了这个调用,它消除了“_”到“U”的翻译.

SecureRandom.urlsafe_base64(15).tr('lIO0=-','sxyzEM')

显示了更合理的结果分布,但它仍然留下了下划线的特殊性.

谁能告诉我为什么会这样,以及如何解决它?示例输出是:

irb(main):017:0> SecureRandom.urlsafe_base64(15).tr('lIO0=-_','sxyzEMU').first(8)
=> "mvgjptsy"
irb(main):018:0> SecureRandom.urlsafe_base64(15).tr('lIO0=-_','sxyzEMU').first(8)
=> "UUh1fUU-"
irb(main):019:0> SecureRandom.urlsafe_base64(15).tr('lIO0=-_','sxyzEMU').first(8)
=> "UgU4U981"
irb(main):020:0> SecureRandom.urlsafe_base64(15).tr('lIO0=-_','sxyzEMU').first(8)
=> "UUUU1q27"
irb(main):021:0> SecureRandom.urlsafe_base64(15).tr('lIO0=-_','sxyzEMU').first(8)
=> "ajU7zjUn"
irb(main):022:0> SecureRandom.urlsafe_base64(15).tr('lIO0=-_','sxyzEMU').first(8)
=> "UxgUwt7U"
irb(main):023:0> SecureRandom.urlsafe_base64(15).tr('lIO0=-_','sxyzEMU').first(8)
=> "UUpUcUvU"
irb(main):024:0> SecureRandom.urlsafe_base64(15).tr('lIO0=-_','sxyzEMU').first(8)
=> "U4UbU2ho"
irb(main):025:0> SecureRandom.urlsafe_base64(15).tr('lIO0=-_','sxyzEMU').first(8)
=> "icsU7bcs"
irb(main):026:0> SecureRandom.urlsafe_base64(15).tr('lIO0=-_','sxyzEMU').first(8)
=> "5vfdfUoU"
irb(main):027:0> SecureRandom.urlsafe_base64(15).tr('lIO0=-','sxyzEM').first(8)
=> "1Q71wib4"
irb(main):028:0> SecureRandom.urlsafe_base64(15).tr('lIO0=-','sxyzEM').first(8)
=> "TzkKT9s6"
irb(main):029:0> SecureRandom.urlsafe_base64(15).tr('lIO0=-','sxyzEM').first(8)
=> "iWGBgys_"
irb(main):030:0> SecureRandom.urlsafe_base64(15).tr('lIO0=-','sxyzEM').first(8)
=> "hkxNPGKg"
irb(main):031:0> SecureRandom.urlsafe_base64(15).tr('lIO0=-','sxyzEM').first(8)
=> "sHMDeAsc"
irb(main):032:0> SecureRandom.urlsafe_base64(15).tr('lIO0=-','sxyzEM').first(8)
=> "Tov7bYaB"
irb(main):033:0> SecureRandom.urlsafe_base64(15).tr('lIO0=-','sxyzEM').first(8)
=> "4vMLFdSJ"
irb(main):034:0> SecureRandom.urlsafe_base64(15).tr('lIO0=-','sxyzEM').first(8)
=> "zxstSvs8"
irb(main):035:0> SecureRandom.urlsafe_base64(15).tr('lIO0=-','sxyzEM').first(8)
=> "rMEdizyG"
irb(main):036:0> SecureRandom.urlsafe_base64(15).tr('lIO0=-','sxyzEM').first(8)
=> "gXK33_ux"

解决方法

String#tr使用 – 字符表示一系列字符.如果你的意思是 – 你需要用反斜杠来逃避它.示例是将=更改为E,>进入M,所有的角色来自?将_(包括所有大写字母)转换为U,因此U的丰富.

要获得预期的结果,请使用以下命令:

SecureRandom.urlsafe_base64(15).tr('lIO0=\-_','sxyzEMU')

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐