Bal*_*nan 4 ruby session controller ruby-on-rails
我有一个导轨控制器
class Controllername < application
def method1
obj = API_CALL
session =obj.access_token
redirect_to redirect_url #calls the API authorization end point
#and redirects to action method2
end
def method2
obj.call_after_sometime
end
end
Run Code Online (Sandbox Code Playgroud)
我在方法1中调用一些API来获取对象并在会话中存储访问令牌和秘密.method1完成它的行动.
在我调用的某个时间之后method2,现在会话(访问令牌,秘密)被正确存储.
但是,现在method2我需要call_after_sometime使用OBJECT 调用API obj.但是,现在obj不可用,因为我没有将它存储在会话中(我们将收到存储加密对象的SSL错误).
我想知道什么是最好的存储方式obj,method1以便以后可以使用method2
编辑:
当我尝试Rails.cache或Session我收到错误
TypeError - no _dump_data is defined for class OpenSSL::X509::Certificate
Run Code Online (Sandbox Code Playgroud)
谷歌搜索我发现当我在会话中存储加密值时,它会抛出此错误.
您可以尝试缓存它,但要小心缓存键,如果对象是每个用户唯一的,那么在缓存键中添加用户ID
class Controllername < application
def method1
obj = API_CALL
Rails.cache.write("some_api_namespace/#{current_user.id}", obj)
session =obj.access_token
end
def method2
obj = Rails.cache.read("some_api_namespace/#{current_user.id}")
obj.call_after_sometime
end
end
Run Code Online (Sandbox Code Playgroud)
如果尝试读取时可能不存在缓存,那么如果找不到数据,则可以使用fetch而不是read调用api
def method2
obj = Rails.cache.fetch("some_api_namespace/#{current_user.id}") do
method_1
end
obj.call_after_sometime
end
Run Code Online (Sandbox Code Playgroud)