{"id":1966,"date":"2015-12-16T00:59:30","date_gmt":"2015-12-16T00:59:30","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=1966"},"modified":"2019-01-02T06:24:40","modified_gmt":"2019-01-02T14:24:40","slug":"adding-user-sign-up-to-your-android-app-with-node-js-and-couchbase-mobile","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/es\/adding-user-sign-up-to-your-android-app-with-node-js-and-couchbase-mobile\/","title":{"rendered":"C\u00f3mo a\u00f1adir el registro de usuarios a tu aplicaci\u00f3n Android con Node.js y Couchbase Mobile"},"content":{"rendered":"<p>Con la API de Sync Gateway, puede autenticarse en el lado del cliente como un usuario espec\u00edfico para replicar los datos a los que este usuario tiene acceso. En el caso de la autenticaci\u00f3n b\u00e1sica, el usuario ya debe existir en la base de datos de Sync Gateway. Hay dos formas de crear usuarios:<\/p>\n<ul>\n<li>En el archivo de configuraci\u00f3n <code>usuarios<\/code> campo.<\/li>\n<li>En la API REST de Admin.<\/li>\n<\/ul>\n<p>Para proporcionar una pantalla de inicio de sesi\u00f3n y registro, debe configurar un servidor de aplicaciones que gestione la creaci\u00f3n de usuarios en consecuencia, ya que el puerto de administraci\u00f3n (4985) no es de acceso p\u00fablico. En este tutorial, aprender\u00e1s c\u00f3mo:<\/p>\n<ul>\n<li>Utilice la API REST de Admin para crear un usuario.<\/li>\n<li>Configurar un App Server con Node.js para gestionar los usuarios.<\/li>\n<li>Dise\u00f1e una pantalla de inicio de sesi\u00f3n y registro en una aplicaci\u00f3n Android de ejemplo para probar su App Server.<\/li>\n<\/ul>\n<h2>Para empezar<\/h2>\n<p>Descargue Sync Gateway y descomprima el archivo:<\/p>\n<p>https:\/\/www.couchbase.com\/nosql-databases\/downloads#Couchbase_Mobile<\/p>\n<p>Para este tutorial, no necesitar\u00e1s un archivo de configuraci\u00f3n. Para las propiedades b\u00e1sicas de configuraci\u00f3n, puede utilizar las opciones de la l\u00ednea de comandos. El binario a ejecutar se encuentra en <code>~\/Downloads\/couchbase-sync-gateway\/bin\/<\/code>. Ejecute el programa con la tecla <code>--ayuda<\/code> para ver la lista de opciones disponibles:<\/p>\n<pre><code class=\"language-bash\">~\/Downloads\/couchbase-sync-gateway\/bin\/sync_gateway --help\r\nUsage of \/Users\/jamesnocentini\/Downloads\/couchbase-sync-gateway\/bin\/sync_gateway:\r\n  -adminInterface=\"127.0.0.1:4985\": Address to bind admin interface to\r\n  -bucket=\"sync_gateway\": Name of bucket\r\n  -configServer=\"\": URL of server that can return database configs\r\n  -dbname=\"\": Name of Couchbase Server database (defaults to name of bucket)\r\n  -deploymentID=\"\": Customer\/project identifier for stats reporting\r\n  -interface=\":4984\": Address to bind to\r\n  -log=\"\": Log keywords, comma separated\r\n  -logFilePath=\"\": Path to log file\r\n  -personaOrigin=\"\": Base URL that clients use to connect to the server\r\n  -pool=\"default\": Name of pool\r\n  -pretty=false: Pretty-print JSON responses\r\n  -profileInterface=\"\": Address to bind profile interface to\r\n  -url=\"walrus:\": Address of Couchbase server\r\n  -verbose=false: Log more info about requests<\/code><\/pre>\n<p>Para este tutorial, se especificar\u00e1 el <code>dbname<\/code>, <code>interfaz<\/code>, <code>bonito<\/code> y <code>url<\/code>:<\/p>\n<pre><code class=\"language-bash\">~\/Downloads\/couchbase-sync-gateway\/bin\/sync_gateway -dbname=\"smarthome\" -interface=\"0.0.0.0:4984\" -pretty=\"true\" -url=\"walrus:\"<\/code><\/pre>\n<p>Para crear un usuario, puede ejecutar lo siguiente en su terminal:<\/p>\n<pre><code class=\"language-bash\">$ curl -vX POST -H 'Content-Type: application\/json' \r\n       -d '{\"name\": \"adam\", \"password\": \"letmein\"}' \r\n       :4985\/smarthome\/_user\/<\/code><\/pre>\n<p><strong>NOTA<\/strong>: El campo nombre del objeto JSON no debe contener espacios.<\/p>\n<p>Esto deber\u00eda devolver un <code>201 Creado<\/code> c\u00f3digo de estado. Ahora, inicia sesi\u00f3n como este usuario en el puerto est\u00e1ndar:<\/p>\n<pre><code class=\"language-bash\">$ curl -vX POST -H 'Content-Type: application\/json' \r\n       -d '{\"name\": \"adam\", \"password\": \"letmein\"}' \r\n       :4984\/smarthome\/_session<\/code><\/pre>\n<p>La respuesta contendr\u00e1 un <code>Set-Cookie<\/code> y los datos del usuario en el cuerpo.<\/p>\n<p>Todos los SDKs de Couchbase Mobile tienen un m\u00e9todo para especificar el nombre de usuario y la contrase\u00f1a para la autenticaci\u00f3n, por lo que lo m\u00e1s probable es que no tengas que preocuparte de hacer esa segunda solicitud para iniciar sesi\u00f3n.<\/p>\n<h2>Servidor de aplicaciones<\/h2>\n<p>En esta secci\u00f3n, utilizar\u00e1 la funci\u00f3n <code>\/_usuario<\/code> Admin REST API endpoint p\u00fablico para permitir a los usuarios registrarse a trav\u00e9s de la aplicaci\u00f3n.<\/p>\n<p>Utilizar\u00e1 el popular <a href=\"https:\/\/expressjs.com\/\">Express<\/a> para gestionar la solicitud de creaci\u00f3n de un usuario y el m\u00f3dulo <a href=\"https:\/\/github.com\/request\/request\">solicitar<\/a> para dirigir el resto del tr\u00e1fico a Sync Gateway.<\/p>\n<p><img decoding=\"async\" src=\"\/wp-content\/original-assets\/2015\/september\/adding-user-sign-up-to-your-android-app-with-node.js-and-couchbase-mobile\/custom_auth_flow.png\" \/><\/p>\n<p>Instala los siguientes m\u00f3dulos de Node.js:<\/p>\n<pre><code class=\"language-bash\">npm install express body-parser request http-proxy --save<\/code><\/pre>\n<p>Abrir un nuevo archivo <code>servidor.js<\/code> y a\u00f1ade lo siguiente:<\/p>\n<pre><code class=\"language-javascript\">var express = require('express')\r\n  , bodyParser = require('body-parser')\r\n  , request = require('request').defaults({json: true})\r\n  , httpProxy = require('http-proxy');\r\n\r\n\/\/ 1\r\nvar app = express();\r\napp.use('\/signup', bodyParser.json());\r\n\r\n\/\/ 2\r\napp.post('\/signup', function (req, res) {\r\n  console.log('its signup time');\r\n\r\n  var json = req.body;\r\n  var options = {\r\n    url: 'https:\/\/0.0.0.0:4985\/smarthome\/_user\/',\r\n    method: 'POST',\r\n    body: json\r\n  };\r\n\r\n  request(options, function(error, response) {\r\n    res.writeHead(response.statusCode);\r\n    res.end();\r\n  });\r\n});\r\n\r\n\/\/ 3\r\napp.all('*', function(req, res) {\r\n  var url = 'https:\/\/0.0.0.0:4984' + req.url;\r\n  req.pipe(request(url)).pipe(res);\r\n});\r\n\r\n\/\/ 4\r\nvar server = app.listen(8000, function () {\r\n  var host = server.address().address;\r\n  var port = server.address().port;\r\n\r\n  console.log('App listening at https:\/\/%s:%s', host, port);\r\n});<\/code><\/pre>\n<p>Esto es lo que ocurre paso a paso:<\/p>\n<ol>\n<li>Instanciar una nueva instancia de express y utilizar la funci\u00f3n <code>bodyParser<\/code> s\u00f3lo si la ruta coincide con <code>inscr\u00edbase en<\/code>. De hecho, para todas las dem\u00e1s solicitudes enviadas a Sync Gateway se necesita el cuerpo de la solicitud sin procesar.<\/li>\n<li>Manejar el <code>\/inscripci\u00f3n<\/code> y utilizar el m\u00f3dulo de solicitud para crear el usuario en el puerto de administraci\u00f3n.<\/li>\n<li>Proxy todas las dem\u00e1s solicitudes a Sync Gateway.<\/li>\n<li>Inicia el servidor web Node.js en el puerto 8000.<\/li>\n<\/ol>\n<p>A partir de ahora, utilizar\u00e1s la siguiente url para crear usuarios a trav\u00e9s de la aplicaci\u00f3n y poner en marcha las r\u00e9plicas push\/pull:<\/p>\n<p>https:\/\/localhost:8000<\/p>\n<p>Cree otro usuario para comprobar que todo funciona como se espera:<\/p>\n<pre><code class=\"language-bash\">$ curl -vX POST -H 'Content-Type: application\/json' \r\n       -d '{\"name\": \"andy\", \"password\": \"letmein\"}' \r\n       :8000\/signup\/<\/code><\/pre>\n<p>Y para iniciar sesi\u00f3n como este usuario:<\/p>\n<pre><code class=\"language-bash\">$ curl -vX POST -H 'Content-Type: application\/json' \r\n       -d '{\"name\": \"andy\", \"password\": \"letmein\"}' \r\n       :8000\/smarthome\/_session<\/code><\/pre>\n<p>En la siguiente secci\u00f3n, crear\u00e1s una aplicaci\u00f3n Android sencilla con una pantalla de inicio de sesi\u00f3n y registro para probar esos puntos finales.<\/p>\n<h2>Aplicaci\u00f3n Android<\/h2>\n<p>Abra Android Studio y seleccione <strong>Iniciar un nuevo proyecto de Android Studio<\/strong> del <strong>Inicio r\u00e1pido<\/strong> men\u00fa.<\/p>\n<p>Nombre de la aplicaci\u00f3n <strong>SmartHome<\/strong>establezca un dominio de empresa y una ubicaci\u00f3n de proyecto adecuados y, a continuaci\u00f3n, haga clic en <strong>Siguiente<\/strong>:<\/p>\n<p><img decoding=\"async\" src=\"\/wp-content\/original-assets\/2015\/september\/adding-user-sign-up-to-your-android-app-with-node.js-and-couchbase-mobile\/new_project.png\" \/><\/p>\n<p>En el cuadro de di\u00e1logo Dispositivos Android de destino, aseg\u00farese de marcar <strong>Tel\u00e9fono y tableta<\/strong>ajuste el SDK m\u00ednimo a <strong>API 22: Android 5.1 (Lollipop)<\/strong> para ambos, y haga clic en <strong>Siguiente<\/strong>:<\/p>\n<p><img decoding=\"async\" src=\"\/wp-content\/original-assets\/2015\/september\/adding-user-sign-up-to-your-android-app-with-node.js-and-couchbase-mobile\/target_platform.png\" \/><\/p>\n<p>En la siguiente <strong>A\u00f1adir una actividad a M\u00f3vil<\/strong> seleccione A\u00f1adir <strong>Actividad en blanco<\/strong> y nombre la actividad <strong>Actividad de bienvenida<\/strong>:<\/p>\n<p><img decoding=\"async\" src=\"\/wp-content\/original-assets\/2015\/september\/adding-user-sign-up-to-your-android-app-with-node.js-and-couchbase-mobile\/blank_activity.png\" \/><\/p>\n<p>Para construir las funcionalidades de registro e inicio de sesi\u00f3n se utilizar\u00e1n dos dependencias:<\/p>\n<ul>\n<li><strong>Biblioteca de apoyo al dise\u00f1o de Android<\/strong>para tener componentes de texto de entrada que sigan las especificaciones de Material Design.<\/li>\n<li><strong>OkHttp<\/strong>para gestionar las peticiones POST a <code>\/inscripci\u00f3n<\/code> y <code>\/smarthome\/sesi\u00f3n<\/code>.<\/li>\n<\/ul>\n<p>En <code>build.gradle<\/code>a\u00f1ade esas dependencias:<\/p>\n<pre><code class=\"language-none\">compile 'com.android.support:design:22.2.1'\r\ncompile 'com.squareup.okhttp:okhttp:2.3.0'<\/code><\/pre>\n<p>En <code>actividad_bienvenida.xml<\/code>a\u00f1ada lo siguiente <strong>LinearLayout<\/strong> en el interior del <strong>RelativeLayout<\/strong>:<\/p>\n<pre><code class=\"language-xml\">\r\n    <button style=\"?android: attr\/borderlessButtonStyle;\">\r\n    <\/button><button style=\"?android: attr\/borderlessButtonStyle;\">\r\n<\/button><\/code><\/pre>\n<p>Observe que ambos botones tienen un <code>onClick<\/code> atributo. Mueva el cursor del rat\u00f3n sobre uno de los m\u00e9todos y utilice la tecla <code>alt + enter<\/code> &gt; <code>Crear openLoginActivity(vista)<\/code> para crear ese m\u00e9todo en <code>BienvenidoActividad<\/code>:<\/p>\n<p><img decoding=\"async\" src=\"\/wp-content\/original-assets\/2015\/september\/adding-user-sign-up-to-your-android-app-with-node.js-and-couchbase-mobile\/onclick_method_preview.gif\" \/><\/p>\n<p>Haga lo mismo con el <strong>Inscribirse<\/strong> bot\u00f3n.<\/p>\n<p>A continuaci\u00f3n, cree dos nuevas clases y dise\u00f1os XML utilizando la funci\u00f3n <strong>Actividad en blanco<\/strong> plantilla. Una deber\u00eda llamarse <code>Inicio de sesi\u00f3n<\/code> y el otro <code>Reg\u00edstrese en<\/code>:<\/p>\n<p><img decoding=\"async\" src=\"\/wp-content\/original-assets\/2015\/september\/adding-user-sign-up-to-your-android-app-with-node.js-and-couchbase-mobile\/new_activity.png\" \/><\/p>\n<p>En el <code>openLoginActivity<\/code> y <code>openSignUpActivity<\/code> a\u00f1ada las siguientes intenciones expl\u00edcitas:<\/p>\n<pre><code class=\"language-java\">public void openLoginActivity(View view) {\r\n    Intent intent = new Intent(this, Login.class);\r\n    startActivity(intent);\r\n}\r\n\r\npublic void openSignUpActivity(View view) {\r\n    Intent intent = new Intent(this, SignUp.class);\r\n    startActivity(intent);\r\n}<\/code><\/pre>\n<p>Cambiar la clase padre de <code>Login.java<\/code> y <code>Registro.java<\/code> de <code>AppCompatActivity<\/code> a <code>Actividad<\/code>.<\/p>\n<p>En <code>res\/values\/styles.xml (v21)<\/code>cambia el tema principal a <code>Theme.AppCompat.Light.DarkActionBar<\/code>.<\/p>\n<p>Abrir <code>activity_sign_up.xml<\/code> y a\u00f1ada lo siguiente dentro de <strong>RelativeLayout<\/strong> etiqueta:<\/p>\n<pre><code class=\"language-xml\">\r\n\r\n        \r\n\r\n        \r\n\r\n            \r\n        \r\n\r\n        \r\n\r\n            \r\n        \r\n\r\n        \r\n\r\n            \r\n        \r\n\r\n        <button style=\"?android: attr\/borderlessButtonStyle;\">\r\n\r\n    <\/button><\/code><\/pre>\n<p>Ahora ejecute la aplicaci\u00f3n y seleccione la opci\u00f3n <strong>Inscribirse<\/strong> ver\u00e1 los elementos EditText de Material Design.<\/p>\n<p>Crear una nueva clase java llamada <code>NetworkHelper<\/code> con lo siguiente:<\/p>\n<pre><code class=\"language-java\">public static final MediaType JSON = MediaType.parse(\"application\/json; charset=utf-8\");\r\n\r\nOkHttpClient client = new OkHttpClient();\r\n\r\nCall post(String url, String json, Callback callback) {\r\n    RequestBody body = RequestBody.create(JSON, json);\r\n    Request request = new Request.Builder()\r\n            .url(url)\r\n            .post(body)\r\n            .build();\r\n    Call call = client.newCall(request);\r\n    call.enqueue(callback);\r\n    return call;\r\n}<\/code><\/pre>\n<p>Antes de poder realizar peticiones HTTP en tu aplicaci\u00f3n Android, primero tienes que a\u00f1adir la propiedad <strong>Red<\/strong> permiso en <code>AndroidManifest.xml<\/code>:<\/p>\n<pre><code class=\"language-xml\"><\/code><\/pre>\n<p>Ahora de vuelta en <code>Registro.java<\/code>a\u00f1ade las siguientes propiedades:<\/p>\n<pre><code class=\"language-java\">NetworkHelper networkHelper = new NetworkHelper();\r\n\r\nEditText nameInput;\r\nEditText passwordInput;\r\nEditText confirmPasswordInput;<\/code><\/pre>\n<p>Fije el <strong>EditarTexto<\/strong> componentes en el <code>onCreate<\/code> m\u00e9todo:<\/p>\n<pre><code class=\"language-java\">nameInput = (EditText) findViewById(R.id.nameInput);\r\npasswordInput = (EditText) findViewById(R.id.passwordInput);\r\nconfirmPasswordInput = (EditText) findViewById(R.id.confirmPasswordInput);<\/code><\/pre>\n<p>Aplicar la <code>inscr\u00edbase en<\/code> para enviar una solicitud POST a <code>:8000\/inscripci\u00f3n<\/code> con el nombre y la contrase\u00f1a proporcionados:<\/p>\n<pre><code class=\"language-java\">public void signup(View view) {\r\n    if (!passwordInput.getText().toString().equals(confirmPasswordInput.getText().toString())) {\r\n        Toast.makeText(getApplicationContext(), \"The passwords do not match\", Toast.LENGTH_LONG).show();\r\n    } else {\r\n        String json = \"{\"name\": \"\" + nameInput.getText() + \"\", \"password\":\"\" + passwordInput.getText() + \"\"}\";\r\n        networkHelper.post(\"https:\/\/10.0.3.2:8000\/signup\", json, new Callback() {\r\n            @Override\r\n            public void onFailure(Request request, IOException e) {\r\n            }\r\n            @Override\r\n            public void onResponse(Response response) throws IOException {\r\n                String responseStr = response.body().string();\r\n                final String messageText = \"Status code : \" + response.code() +\r\n                        \"n\" +\r\n                        \"Response body : \" + responseStr;\r\n                runOnUiThread(new Runnable() {\r\n                    @Override\r\n                    public void run() {\r\n                        Toast.makeText(getApplicationContext(), messageText, Toast.LENGTH_LONG).show();\r\n                    }\r\n                });\r\n            }\r\n        });\r\n    }\r\n}<\/code><\/pre>\n<p>Ejecute la aplicaci\u00f3n e introduzca un nombre y una contrase\u00f1a. Si la cuenta de usuario se ha creado correctamente, recibir\u00e1 un mensaje <code>201 Creado<\/code> y deber\u00eda ver el usuario reci\u00e9n creado en el panel de administraci\u00f3n:<\/p>\n<p><img decoding=\"async\" src=\"\/wp-content\/original-assets\/2015\/september\/adding-user-sign-up-to-your-android-app-with-node.js-and-couchbase-mobile\/admin_ui.png\" \/><\/p>\n<p>Por \u00faltimo, terminemos con la pantalla de inicio de sesi\u00f3n. En <code>activity_login.xml<\/code>a\u00f1ada lo siguiente en <strong>RelativeLayout<\/strong>:<\/p>\n<pre><code class=\"language-xml\">\r\n    \r\n    \r\n        \r\n    \r\n    \r\n        \r\n    \r\n    <button style=\"?android: attr\/borderlessButtonStyle;\">\r\n<\/button><\/code><\/pre>\n<p>A\u00f1ade las propiedades a <code>Login.java<\/code>:<\/p>\n<pre><code class=\"language-java\">NetworkHelper networkHelper = new NetworkHelper();\r\n\r\nEditText nameInput;\r\nEditText passwordInput;<\/code><\/pre>\n<p>Y realice la misma operaci\u00f3n de vinculaci\u00f3n de vistas en <code>onCreate<\/code>:<\/p>\n<pre><code class=\"language-java\">nameInput = (EditText) findViewById(R.id.nameInput);\r\npasswordInput = (EditText) findViewById(R.id.passwordInput);<\/code><\/pre>\n<p>Aplicar la <code>inicio de sesi\u00f3n<\/code> m\u00e9todo:<\/p>\n<pre><code class=\"language-java\">public void login(View view) {\r\n    String json = \"{\"name\": \"\" + nameInput.getText() + \"\", \"password\":\"\" + passwordInput.getText() + \"\"}\";\r\n    networkHelper.post(\"https:\/\/10.0.3.2:8000\/smarthome\/_session\", json, new Callback() {\r\n        @Override\r\n        public void onFailure(Request request, IOException e) {\r\n        }\r\n        @Override\r\n        public void onResponse(Response response) throws IOException {\r\n            String responseStr = response.body().string();\r\n            final String messageText = \"Status code : \" + response.code() +\r\n                    \"n\" +\r\n                    \"Response body : \" + responseStr;\r\n            runOnUiThread(new Runnable() {\r\n                @Override\r\n                public void run() {\r\n                    Toast.makeText(getApplicationContext(), messageText, Toast.LENGTH_LONG).show();\r\n                }\r\n            });\r\n        }\r\n    });\r\n}<\/code><\/pre>\n<p>Ejecute la aplicaci\u00f3n e inicie sesi\u00f3n con el nombre de usuario y la contrase\u00f1a que eligi\u00f3 anteriormente. Si la autenticaci\u00f3n se ha realizado correctamente, recibir\u00e1s un c\u00f3digo de estado 200 OK:<\/p>\n<p><img decoding=\"async\" src=\"\/wp-content\/original-assets\/2015\/september\/adding-user-sign-up-to-your-android-app-with-node.js-and-couchbase-mobile\/alert_dialog.png\" \/><\/p>\n<p><strong>NOTA:<\/strong> Todos los SDKs de Couchbase Lite tienen un m\u00e9todo en el directorio <code>Replicaci\u00f3n<\/code> que toma un nombre y una contrase\u00f1a y realiza la autenticaci\u00f3n por usted, por lo que probablemente no tendr\u00e1 que hacer esa solicitud POST a <code>\/smarthome\/sesi\u00f3n<\/code>.<\/p>\n<h2>Conclusi\u00f3n<\/h2>\n<p>En este tutorial, ha aprendido a utilizar la API REST de Admin para crear usuarios a trav\u00e9s de una pantalla de registro en una aplicaci\u00f3n Android.<\/p>","protected":false},"excerpt":{"rendered":"<p>With the Sync Gateway API, you can authenticate on the client side as a specific user to replicate the data this user has access to. In the case of basic authentication, the user must already exist in the Sync Gateway [&hellip;]<\/p>","protected":false},"author":51,"featured_media":13873,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[1810],"tags":[],"ppma_author":[9028],"class_list":["post-1966","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-couchbase-mobile"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v26.2 (Yoast SEO v26.2) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Sign Up to your Android app with Node.js &amp; Couchbase Mobile<\/title>\n<meta name=\"description\" content=\"Learn how to use the Admin REST API to create users through a Sign Up screen and setup an App Server with Node.js to manage the users in an Android app.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.couchbase.com\/blog\/es\/adding-user-sign-up-to-your-android-app-with-node-js-and-couchbase-mobile\/\" \/>\n<meta property=\"og:locale\" content=\"es_MX\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Adding user Sign Up to your Android app with Node.js and Couchbase Mobile\" \/>\n<meta property=\"og:description\" content=\"Learn how to use the Admin REST API to create users through a Sign Up screen and setup an App Server with Node.js to manage the users in an Android app.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/es\/adding-user-sign-up-to-your-android-app-with-node-js-and-couchbase-mobile\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:published_time\" content=\"2015-12-16T00:59:30+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2019-01-02T14:24:40+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2022\/11\/couchbase-nosql-dbaas.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1800\" \/>\n\t<meta property=\"og:image:height\" content=\"630\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"James Nocentini, Technical Writer, Mobile, Couchbase\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"James Nocentini, Technical Writer, Mobile, Couchbase\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"8 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/adding-user-sign-up-to-your-android-app-with-node-js-and-couchbase-mobile\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/adding-user-sign-up-to-your-android-app-with-node-js-and-couchbase-mobile\/\"},\"author\":{\"name\":\"James Nocentini, Technical Writer, Mobile, Couchbase\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/ec4dfbd349cb4a321fb6a92b71a9a7f6\"},\"headline\":\"Adding user Sign Up to your Android app with Node.js and Couchbase Mobile\",\"datePublished\":\"2015-12-16T00:59:30+00:00\",\"dateModified\":\"2019-01-02T14:24:40+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/adding-user-sign-up-to-your-android-app-with-node-js-and-couchbase-mobile\/\"},\"wordCount\":942,\"commentCount\":1,\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/adding-user-sign-up-to-your-android-app-with-node-js-and-couchbase-mobile\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"articleSection\":[\"Couchbase Mobile\"],\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/adding-user-sign-up-to-your-android-app-with-node-js-and-couchbase-mobile\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/adding-user-sign-up-to-your-android-app-with-node-js-and-couchbase-mobile\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/adding-user-sign-up-to-your-android-app-with-node-js-and-couchbase-mobile\/\",\"name\":\"Sign Up to your Android app with Node.js & Couchbase Mobile\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/adding-user-sign-up-to-your-android-app-with-node-js-and-couchbase-mobile\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/adding-user-sign-up-to-your-android-app-with-node-js-and-couchbase-mobile\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"datePublished\":\"2015-12-16T00:59:30+00:00\",\"dateModified\":\"2019-01-02T14:24:40+00:00\",\"description\":\"Learn how to use the Admin REST API to create users through a Sign Up screen and setup an App Server with Node.js to manage the users in an Android app.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/adding-user-sign-up-to-your-android-app-with-node-js-and-couchbase-mobile\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/adding-user-sign-up-to-your-android-app-with-node-js-and-couchbase-mobile\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/adding-user-sign-up-to-your-android-app-with-node-js-and-couchbase-mobile\/#primaryimage\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"width\":1800,\"height\":630},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/adding-user-sign-up-to-your-android-app-with-node-js-and-couchbase-mobile\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.couchbase.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Adding user Sign Up to your Android app with Node.js and Couchbase Mobile\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"name\":\"The Couchbase Blog\",\"description\":\"Couchbase, the NoSQL Database\",\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.couchbase.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"es\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\",\"name\":\"The Couchbase Blog\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png\",\"width\":218,\"height\":34,\"caption\":\"The Couchbase Blog\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/ec4dfbd349cb4a321fb6a92b71a9a7f6\",\"name\":\"James Nocentini, Technical Writer, Mobile, Couchbase\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/09977bdd14473dc23a125f2f74c3e816\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/0aa80108e5c81e282d705199edae5a25f8ef92abf15cd64f8ff19837abcee09a?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/0aa80108e5c81e282d705199edae5a25f8ef92abf15cd64f8ff19837abcee09a?s=96&d=mm&r=g\",\"caption\":\"James Nocentini, Technical Writer, Mobile, Couchbase\"},\"description\":\"James Nocentini is the Technical Writer in charge of the documentation for Couchbase Mobile. Previously, he worked as a Developer Advocate and before that as a front-end developer for HouseTrip. He also enjoys writing Android tutorials for raywenderlich.com in his spare time.\",\"url\":\"https:\/\/www.couchbase.com\/blog\/es\/author\/james-nocentini\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Sign Up to your Android app with Node.js & Couchbase Mobile","description":"Learn how to use the Admin REST API to create users through a Sign Up screen and setup an App Server with Node.js to manage the users in an Android app.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.couchbase.com\/blog\/es\/adding-user-sign-up-to-your-android-app-with-node-js-and-couchbase-mobile\/","og_locale":"es_MX","og_type":"article","og_title":"Adding user Sign Up to your Android app with Node.js and Couchbase Mobile","og_description":"Learn how to use the Admin REST API to create users through a Sign Up screen and setup an App Server with Node.js to manage the users in an Android app.","og_url":"https:\/\/www.couchbase.com\/blog\/es\/adding-user-sign-up-to-your-android-app-with-node-js-and-couchbase-mobile\/","og_site_name":"The Couchbase Blog","article_published_time":"2015-12-16T00:59:30+00:00","article_modified_time":"2019-01-02T14:24:40+00:00","og_image":[{"width":1800,"height":630,"url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2022\/11\/couchbase-nosql-dbaas.png","type":"image\/png"}],"author":"James Nocentini, Technical Writer, Mobile, Couchbase","twitter_card":"summary_large_image","twitter_misc":{"Written by":"James Nocentini, Technical Writer, Mobile, Couchbase","Est. reading time":"8 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/adding-user-sign-up-to-your-android-app-with-node-js-and-couchbase-mobile\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/adding-user-sign-up-to-your-android-app-with-node-js-and-couchbase-mobile\/"},"author":{"name":"James Nocentini, Technical Writer, Mobile, Couchbase","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/ec4dfbd349cb4a321fb6a92b71a9a7f6"},"headline":"Adding user Sign Up to your Android app with Node.js and Couchbase Mobile","datePublished":"2015-12-16T00:59:30+00:00","dateModified":"2019-01-02T14:24:40+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/adding-user-sign-up-to-your-android-app-with-node-js-and-couchbase-mobile\/"},"wordCount":942,"commentCount":1,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/adding-user-sign-up-to-your-android-app-with-node-js-and-couchbase-mobile\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","articleSection":["Couchbase Mobile"],"inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/adding-user-sign-up-to-your-android-app-with-node-js-and-couchbase-mobile\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/adding-user-sign-up-to-your-android-app-with-node-js-and-couchbase-mobile\/","url":"https:\/\/www.couchbase.com\/blog\/adding-user-sign-up-to-your-android-app-with-node-js-and-couchbase-mobile\/","name":"Sign Up to your Android app with Node.js & Couchbase Mobile","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/adding-user-sign-up-to-your-android-app-with-node-js-and-couchbase-mobile\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/adding-user-sign-up-to-your-android-app-with-node-js-and-couchbase-mobile\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","datePublished":"2015-12-16T00:59:30+00:00","dateModified":"2019-01-02T14:24:40+00:00","description":"Learn how to use the Admin REST API to create users through a Sign Up screen and setup an App Server with Node.js to manage the users in an Android app.","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/adding-user-sign-up-to-your-android-app-with-node-js-and-couchbase-mobile\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/adding-user-sign-up-to-your-android-app-with-node-js-and-couchbase-mobile\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.couchbase.com\/blog\/adding-user-sign-up-to-your-android-app-with-node-js-and-couchbase-mobile\/#primaryimage","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","width":1800,"height":630},{"@type":"BreadcrumbList","@id":"https:\/\/www.couchbase.com\/blog\/adding-user-sign-up-to-your-android-app-with-node-js-and-couchbase-mobile\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Adding user Sign Up to your Android app with Node.js and Couchbase Mobile"}]},{"@type":"WebSite","@id":"https:\/\/www.couchbase.com\/blog\/#website","url":"https:\/\/www.couchbase.com\/blog\/","name":"El blog de Couchbase","description":"Couchbase, la base de datos NoSQL","publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.couchbase.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"},{"@type":"Organization","@id":"https:\/\/www.couchbase.com\/blog\/#organization","name":"El blog de Couchbase","url":"https:\/\/www.couchbase.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png","width":218,"height":34,"caption":"The Couchbase Blog"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/ec4dfbd349cb4a321fb6a92b71a9a7f6","name":"James Nocentini, Redactor t\u00e9cnico, M\u00f3vil, Couchbase","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/09977bdd14473dc23a125f2f74c3e816","url":"https:\/\/secure.gravatar.com\/avatar\/0aa80108e5c81e282d705199edae5a25f8ef92abf15cd64f8ff19837abcee09a?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/0aa80108e5c81e282d705199edae5a25f8ef92abf15cd64f8ff19837abcee09a?s=96&d=mm&r=g","caption":"James Nocentini, Technical Writer, Mobile, Couchbase"},"description":"James Nocentini es el escritor t\u00e9cnico encargado de la documentaci\u00f3n de Couchbase Mobile. Anteriormente, trabaj\u00f3 como Developer Advocate y antes de eso como desarrollador front-end para HouseTrip. Tambi\u00e9n disfruta escribiendo tutoriales de Android para raywenderlich.com en su tiempo libre.","url":"https:\/\/www.couchbase.com\/blog\/es\/author\/james-nocentini\/"}]}},"authors":[{"term_id":9028,"user_id":51,"is_guest":0,"slug":"james-nocentini","display_name":"James Nocentini, Technical Writer, Mobile, Couchbase","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/0aa80108e5c81e282d705199edae5a25f8ef92abf15cd64f8ff19837abcee09a?s=96&d=mm&r=g","author_category":"","last_name":"Nocentini","first_name":"James","job_title":"","user_url":"","description":"James Nocentini es el escritor t\u00e9cnico encargado de la documentaci\u00f3n de Couchbase Mobile. Anteriormente, trabaj\u00f3 como Developer Advocate y antes de eso como desarrollador front-end para HouseTrip. Tambi\u00e9n disfruta escribiendo tutoriales de Android para raywenderlich.com en su tiempo libre."}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts\/1966","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/users\/51"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/comments?post=1966"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts\/1966\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/media\/13873"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/media?parent=1966"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/categories?post=1966"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/tags?post=1966"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/ppma_author?post=1966"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}