Ruby on rails 如何使用SecureRandom.urlsafe_base64?

Ruby on rails 如何使用SecureRandom.urlsafe_base64?,ruby-on-rails,ruby,random,token,secure-random,Ruby On Rails,Ruby,Random,Token,Secure Random,我真的是新手,需要创建一个url安全令牌,长度在2到20个字符之间,并且只允许使用字母数字字符(字母和数字)。我使用此令牌由支付提供商进行处理 我有下面的方法,但我得到一个错误,即令牌无效。如何重写该方法,使其仍然是url安全的,但不超过20个字符,并且只使用字母数字字符 token = SecureRandom.urlsafe_base64 SecureRandom.urlsafe\u base64将返回“-”和“\u”,这是您说过不需要的字符 您可以使用SecureRandom.hex(n

我真的是新手,需要创建一个url安全令牌,长度在2到20个字符之间,并且只允许使用字母数字字符(字母和数字)。我使用此令牌由支付提供商进行处理

我有下面的方法,但我得到一个错误,即令牌无效。如何重写该方法,使其仍然是url安全的,但不超过20个字符,并且只使用字母数字字符

token = SecureRandom.urlsafe_base64
SecureRandom.urlsafe\u base64
将返回“-”和“\u”,这是您说过不需要的字符

您可以使用
SecureRandom.hex(n)
获取包含a-z和0-9的
2*n
字符。它仍然是URL安全的。您的最终代码为:

token = SecureRandom.hex # without `n` token will be 16 characters long.

我试过了,但还是犯了同样的错误。然后我在控制台中尝试了
SecureRandom.hex
,结果它产生了32个字符。所以我在控制台中尝试了
SecureRandom.hex(20)
,结果产生了40个字符。使用
SecureRandom.hex(10)
它可以生成20个字符,并且可以正常工作。但不确定是什么解释了这种行为。根据文档,它有2*n个字符长。你可以在这里看到,只是一张便条。十六进制不是字母数字
SecureRandom.hex(n)
将生成第一个,因此生成的字符串中只会出现0-9和a-f。