ruby-on-rails – 带有tr的SecureRandom字符串翻译显示下划线丰
发布时间:2020-12-17 03:38:03 所属栏目:百科 来源:网络整理
导读:我正在使用Devise并尝试使用Devise.friendly_token来生成密码,但却发现它产生了不需要的特殊字符.我发现Devise.friendly_token实际上使用了这个方法: SecureRandom.urlsafe_base64(15).tr('lIO0','sxyz') 试图删除“ – ”,“=”和“_”的特殊字符,我用以下
我正在使用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') (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |