gpt4 book ai didi

r - 如何获取Web浏览器密码存储区以记住R/Shiny密码?

转载 作者:行者123 更新时间:2023-12-03 07:27:37 26 4
gpt4 key购买 nike

问题

我有一个 Shiny 的应用程序,要求用户登录才能访问基础数据集。

用户名和密码是从表单字段中收集的,并通过另一服务器上的RESTful API提交,以获取用于将来请求的访问 token 。在此示例中,我没有包括这些细节。

我想让Web浏览器记住登录详细信息并自动登录,但还不太清楚如何操作。

我尝试了什么

在我的第一个实现中,<input type="text" name="username"><input type="password" name="password">加上actionButton被动态添加到页面中。这迫使用户在每次重新启动 Shiny 的应用程序时都重新登录,这对于开发来说是复杂的,并且对于用户来说是不愉快的。

然后,我找到https://gist.github.com/kostiklv/968927,其中详细说明了让网络浏览器记住密码并登录的条件。

Shiny在一个页面上工作,因此我无法拥有单独的登录页面(这将生成一个新的Shiny session ,放弃登录!)。

我尝试了各种组合方式,这是我所拥有的最接近的方式。该脚本正确填写了过去的密码,但是用户仍然必须手动单击“提交”。

范例程式码

请注意,我有一个自定义技巧,可以使type="password"type="text"相同。请参阅问题底部,以访问此代码

将此代码另存为login.R,然后运行R并键入source("login.R")

write("","blank.html")
require(shiny)
addResourcePath("login",tools:::file_path_as_absolute("./"))
runApp(list(
ui=bootstrapPage(
tags$form(action="#",target="loginframe",
tags$input(id="username",type="text",placeholder="Username"),
tags$input(id="password",type="password",placeholder="Password"),
tags$input(id="loginButton",class="btn btn-primary",type="submit",value="Login")
),
tags$iframe(name="loginframe",src="login/blank.html",style="display:none")
),
server=function(input, output) {
observe({message(
"username ",input$username,"\n",
"password ",input$password,"\n"
)})
})
)

分析发生了什么

请注意,html input submit button的出现似乎可以说明它应该在每次提交时只更新一次输入。如果没有提交按钮,则每次击键都会更新其输入。

Shiny的 submitButton也是如此。

离开表单但删除按钮允许input $ username和input $ password到达服务器代码,但是...

要同时启用常规用户登录和自动登录,我需要该按钮以避免重复尝试验证部分用户名和密码(可能会导致问题)。

发生的事情的日志

这是测试中的控制台日志

使用提交按钮登录:
username 
password
<enter username AA and password BB>
*no update*
<hit submit>
*browser requests to save password / yes*
username A
password B
<refresh page>
username
password
* onscreen form inputs are populated *
<hit submit>
username A
password B

没有提交按钮的日志

注释掉
tags $ input(id =“loginButton”,class =“btn btn-primary”,type =“submit”,value =“Login”)
和前面的逗号

注意,您可能要告诉您的浏览器暂时忘记本地主机Web密码。
username
password
<enter username AA and password BB>
username A
password
username AA
password
username AA
password B
password BB
<refresh browser>
* onscreen form inputs are not populated *
* browser requests to save password *
username
password
<refresh browser>
* onscreen form inputs are populated *
username
password
username AA
username BB

Shiny 的补丁可启用密码处理:

使用 library(devtools)安装
install_github("shiny","alexbbrown",ref="password-field")

或手动下载并安装:
https://github.com/alexbbrown/shiny.git (branch password-field)

或手动修补光泽:
index 9b63c7b..15377d8 100644
--- a/inst/www/shared/shiny.js
+++ b/inst/www/shared/shiny.js
@@ -1336,7 +1336,7 @@
var textInputBinding = new InputBinding();
$.extend(textInputBinding, {
find: function(scope) {
- return $(scope).find('input[type="text"]');
+ return $(scope).find('input[type="text"],input[type="password"]');
},
getId: function(el) {
return InputBinding.prototype.getId.call(this, el) || el.name;

cf Password field using R Shiny framework

最佳答案

我正在寻找类似的东西,而treSTLetech的出色软件包shinyStore为我工作。

它为您 Shiny 的应用程序中的所有数据启用HTML5客户端数据存储。

github页面是here,它的工作方式示例是here

您可能希望阅读自述文件中的“安全性”部分,并确保它足够安全以满足您的目的。

关于r - 如何获取Web浏览器密码存储区以记住R/Shiny密码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21121493/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com