rails7: has_secure_token
又一个魔术方法产生 token
用法
# Schema: User(token:string, auth_token:string)
class User < ActiveRecord::Base
has_secure_token
has_secure_token :auth_token, length: 36
end
user = User.new
user.save
user.token # => "pX27zsMN2ViQKta1bGfLmVJE"
user.auth_token # => "tU9bLuZseefXQ4yQxQo8wjtBvsAfPc78os6R"
user.regenerate_token # => true
user.regenerate_auth_token # => true
如果没有你
这个特性是在
rails5
里引入的功能
class User < ActiveRecord::Base
before_create :set_access_token
private
def set_access_token
self.access_token = generate_token
end
def generate_token
loop do
token = SecureRandom.hex(10)
break token unless User.where(access_token: token).exists?
end
end
end
有了你 has_secure_token
class User < ApplicationRecord
has_secure_token
end
给现有的 model 添加 token
$ rails g migration add_auth_token_to_user auth_token:token
$ rails g model Product access_token:token
# add token to Model
class AddAuthTokenToUser < ActiveRecord::Migration[5.0]
def change
add_column :users, :auth_token, :string
add_index :users, :auth_token, unique: true
end
end
# create new Model
class CreateProducts < ActiveRecord::Migration[5.0]
def change
create_table :products do |t|
t.string :access_token
t.timestamps
end
add_index :products, :access_token, unique: true
end
end