方法
实例公共方法
generates_token_for(purpose, expires_in: nil, &block) 链接
定义特定purpose生成的令牌的行为。令牌可以通过在记录上调用TokenFor#generate_token_for来生成。之后,可以通过使用相同的purpose和token调用find_by_token_for(或find_by_token_for!)来获取该记录。
令牌经过签名,因此具有防篡改性。因此,它们可以暴露给外部世界,例如作为密码重置令牌。
默认情况下,令牌不会过期。可以通过指定expires_in选项中的持续时间来配置它们过期。持续时间是令牌签名的一部分,因此更改expires_in的值将自动使先前生成的令牌失效。
也可以指定一个块。在生成令牌时,使用TokenFor#generate_token_for,该块将在记录的上下文中进行评估,其返回值将以JSON形式嵌入到令牌中。之后,在使用find_by_token_for获取记录时,该块将再次在获取的记录的上下文中进行评估。如果两个JSON值不匹配,则令牌将被视为无效。请注意,块的返回值不应包含敏感信息,因为它将作为人类可读的明文JSON嵌入到令牌中。
示例¶ ↑
class User < ActiveRecord::Base has_secure_password generates_token_for :password_reset, expires_in: 15.minutes do # Last 10 characters of password salt, which changes when password is updated: password_salt&.last(10) end end user = User.first token = user.generate_token_for(:password_reset) User.find_by_token_for(:password_reset, token) # => user # 16 minutes later... User.find_by_token_for(:password_reset, token) # => nil token = user.generate_token_for(:password_reset) User.find_by_token_for(:password_reset, token) # => user user.update!(password: "new password") User.find_by_token_for(:password_reset, token) # => nil