我试图将模块添加到预先存在的R Shiny应用程序,以通过基于cookie的系统验证用户。要使用R Shiny中的Cookie,我已经关注this tutorial,并使用以下javascript代码扩展了shinyjs:
shinyjs.getcookie = function(params) {
var cookie = Cookies.get("id");
if (typeof cookie !== "undefined") {
Shiny.onInputChange("jscookie", cookie);
} else {
var cookie = "";
Shiny.onInputChange("jscookie", cookie);
}
}
shinyjs.setcookie = function(params) {
Cookies.set("id", escape(params), {
expires: 0.5
});
Shiny.onInputChange("jscookie", params);
}
shinyjs.rmcookie = function(params) {
Cookies.remove("id");
Shiny.onInputChange("jscookie", "");
}
我用一个没有模块正常工作的小型R Shiny应用程序做了一个测试示例,然而,当我尝试实现一个模块来执行相同的功能时,我遇到了检索cookie的问题。
在server.R中,我可以使用以下代码检索cookie而不会出现问题:
observe({
js$getcookie()
print(input$jscookie)
})
但是,当我将相同的代码放入模块的服务器功能时,它每次都打印出NULL。我认为这个问题与命名空间有关,而且在server.R中可能input$jscookie
指的是与模块中的input$jscookie
不同的东西。但是,我对Shiny模块非常新(仅仅几天),所以我仍然不确定它们如何工作的某些方面。
有没有办法从模块中检索cookie?