Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Password field using R Shiny framework

Tags:

r

shiny

I am planning to make a log-in for my application. For that I need a password field. I am not aware if shiny is even used for this purpose but still is it possible?

#code for a simple text box is 
textInput("id","label","value")

But is there a password field possible?

like image 280
Aman Mathur Avatar asked Jan 01 '14 16:01

Aman Mathur


People also ask

How do I create a shiny login page in R?

Manual steps to build authentication page. Username : myuser Password : mypass Username : myuser1 Password : mypass1 . To change them, you can edit the following code in R program. In order to modify sidebar section, you can edit the following section of code.


2 Answers

Also, in the meantime there's a native

passwordInput("passwd",label = "Enter password")

password input in shiny. This feature is available in shiny 0.11.1. Here's your reproducible example:

library(shiny)
shinyApp(ui = fluidPage(

tabPanel("Login",
       br(),
       tags$form(
         passwordInput("passwd",label = "Enter password"),
         submitButton("send passwd to shiny")
       ),
       textOutput("pwd")

 )
),
server = function(input, output,session) {

output$pwd <- renderText({
paste0("Your PW is: ",input$passwd)
})


})

Note, that the password is in the session then I am not so sure, how to erase the password from input$passwd after login was successful.

like image 186
Matt Bannert Avatar answered Nov 09 '22 23:11

Matt Bannert


Shiny patch to enable password handling:

Install using library(devtools)

install_github("shiny","alexbbrown",ref="password-field")

Or download and install manually from:

https://github.com/alexbbrown/shiny/tree/password-field

Or patch your shiny manually:

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;

Usage

I haven't provided a convenience function to make password fields, but it can be done easily using R/Shiny html tags:

tags$input(id="password",type="password",placeholder="Password")
like image 27
Alex Brown Avatar answered Nov 09 '22 23:11

Alex Brown