我有一个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
我在方法1中调用一些API来获取对象并在会话中存储访问令牌和秘密。 method1
完成了它的行动。
有一段时间我打电话给method2
,现在会话(访问令牌,秘密)被正确存储。
但是,现在在method2
内我需要使用OBJECT call_after_sometime
调用API obj
。但是,现在obj
不可用,因为我没有存储它在一个会话中(我们将收到存储加密对象的SSL错误)。
我想知道在obj
中存储method1
的最佳方式是什么,以便稍后可以在method2
中使用
编辑:
当我尝试Rails.cache或Session时,我收到错误
TypeError - no _dump_data is defined for class OpenSSL::X509::Certificate
谷歌搜索我发现当我在会话中存储加密值时,它会抛出此错误。
答案 0 :(得分:6)
您可以尝试缓存它,但要小心缓存键,如果对象是每个用户唯一的,那么在缓存键中添加用户ID
+files: FileBag {#221 ▼
#parameters: array:1 [▼
"attachment" => UploadedFile {#27 ▼
-test: false
-originalName: "test_doc.pdf"
-mimeType: "application/pdf"
-size: 82584
-error: 0
}
]
}
如果您尝试阅读时可能不存在缓存,那么您可以使用["errors"]=>
object(Illuminate\Support\ViewErrorBag)#178 (1) {
["bags":protected]=>
array(1) {
["default"]=>
object(Illuminate\Support\MessageBag)#179 (2) {
["messages":protected]=>
array(1) {
["attachment"]=>
array(1) {
[0]=>
string(59) "The attachment field is required when request type is sick."
}
}
["format":protected]=>
string(8) ":message"
}
}
}
代替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
,如果它没有&#39则会调用api ;找到数据
fetch
答案 1 :(得分:1)
尝试这样做:将obj写入会话中的密钥并在第二种方法中再次读出。
class Controllername < application
def method1
obj = API_CALL
session[:obj] = obj
end
def method2
if obj = session[:obj]
obj.call_after_sometime
end
end
end