{"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\/pt\/adding-user-sign-up-to-your-android-app-with-node-js-and-couchbase-mobile\/","title":{"rendered":"Adi\u00e7\u00e3o de inscri\u00e7\u00e3o de usu\u00e1rio ao seu aplicativo Android com Node.js e Couchbase Mobile"},"content":{"rendered":"<p>Com a API do Sync Gateway, voc\u00ea pode se autenticar no lado do cliente como um usu\u00e1rio espec\u00edfico para replicar os dados aos quais esse usu\u00e1rio tem acesso. No caso da autentica\u00e7\u00e3o b\u00e1sica, o usu\u00e1rio j\u00e1 deve existir no banco de dados do Sync Gateway. H\u00e1 duas maneiras de criar usu\u00e1rios:<\/p>\n<ul>\n<li>No arquivo de configura\u00e7\u00e3o sob o <code>usu\u00e1rios<\/code> campo.<\/li>\n<li>Na API REST do administrador.<\/li>\n<\/ul>\n<p>Para fornecer uma tela de login e inscri\u00e7\u00e3o, \u00e9 necess\u00e1rio configurar um servidor de aplicativos que lide com a cria\u00e7\u00e3o de usu\u00e1rios, pois a porta de administra\u00e7\u00e3o (4985) n\u00e3o \u00e9 acess\u00edvel ao p\u00fablico. Neste tutorial, voc\u00ea aprender\u00e1 a:<\/p>\n<ul>\n<li>Use a API REST do administrador para criar um usu\u00e1rio.<\/li>\n<li>Configure um servidor de aplicativos com o Node.js para gerenciar os usu\u00e1rios.<\/li>\n<li>Crie uma tela de login e inscri\u00e7\u00e3o em um aplicativo Android de amostra para testar seu App Server.<\/li>\n<\/ul>\n<h2>Primeiros passos<\/h2>\n<p>Fa\u00e7a o download do Sync Gateway e descompacte o arquivo:<\/p>\n<p>https:\/\/www.couchbase.com\/nosql-databases\/downloads#Couchbase_Mobile<\/p>\n<p>Para este tutorial, voc\u00ea n\u00e3o precisar\u00e1 de um arquivo de configura\u00e7\u00e3o. Para obter propriedades b\u00e1sicas de configura\u00e7\u00e3o, voc\u00ea pode usar as op\u00e7\u00f5es da linha de comando. O bin\u00e1rio a ser executado est\u00e1 localizado em <code>~\/Downloads\/couchbase-sync-gateway\/bin\/<\/code>. Execute o programa com o comando <code>-ajuda<\/code> para ver a lista de op\u00e7\u00f5es dispon\u00edveis:<\/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, voc\u00ea especificar\u00e1 o <code>nome do usu\u00e1rio<\/code>, <code>interface<\/code>, <code>bonito<\/code> e <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 criar um usu\u00e1rio, voc\u00ea pode executar o seguinte no 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>OBSERVA\u00c7\u00c3O<\/strong>: O campo de nome no objeto JSON n\u00e3o deve conter espa\u00e7os.<\/p>\n<p>Isso deve retornar um <code>201 Criado<\/code> c\u00f3digo de status. Agora, fa\u00e7a login como esse usu\u00e1rio na porta padr\u00e3o:<\/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>A resposta conter\u00e1 um <code>Set-Cookie<\/code> e os detalhes do usu\u00e1rio no corpo.<\/p>\n<p>Todos os SDKs do Couchbase Mobile t\u00eam um m\u00e9todo para especificar o nome e a senha de um usu\u00e1rio para autentica\u00e7\u00e3o, portanto, voc\u00ea provavelmente n\u00e3o precisar\u00e1 se preocupar em fazer essa segunda solicita\u00e7\u00e3o de login.<\/p>\n<h2>Servidor de aplicativos<\/h2>\n<p>Nesta se\u00e7\u00e3o, voc\u00ea usar\u00e1 o <code>\/_usu\u00e1rio<\/code> Ponto de extremidade da API REST do administrador publicamente para permitir que os usu\u00e1rios se inscrevam por meio do aplicativo.<\/p>\n<p>Voc\u00ea usar\u00e1 o popular <a href=\"https:\/\/expressjs.com\/\">Expresso<\/a> para tratar a solicita\u00e7\u00e3o de cria\u00e7\u00e3o de um usu\u00e1rio e o m\u00f3dulo <a href=\"https:\/\/github.com\/request\/request\">solicita\u00e7\u00e3o<\/a> para fazer proxy de todos os outros tr\u00e1fegos para o 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>Instale os seguintes m\u00f3dulos do Node.js:<\/p>\n<pre><code class=\"language-bash\">npm install express body-parser request http-proxy --save<\/code><\/pre>\n<p>Abrir um novo arquivo <code>servidor.js<\/code> e adicione o seguinte:<\/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>Veja a seguir o que est\u00e1 acontecendo, passo a passo:<\/p>\n<ol>\n<li>Instanciar uma nova inst\u00e2ncia do express e usar o <code>bodyParser<\/code> middleware somente se o caminho corresponder a <code>registro<\/code>. De fato, para todas as outras solicita\u00e7\u00f5es enviadas ao Sync Gateway, voc\u00ea precisa do corpo bruto da solicita\u00e7\u00e3o.<\/li>\n<li>Manuseie o <code>\/signup<\/code> e usar o m\u00f3dulo de solicita\u00e7\u00e3o para criar o usu\u00e1rio na porta de administra\u00e7\u00e3o.<\/li>\n<li>Proxy de todas as outras solicita\u00e7\u00f5es para o Sync Gateway.<\/li>\n<li>Inicie o servidor da Web Node.js na porta 8000.<\/li>\n<\/ol>\n<p>De agora em diante, voc\u00ea usar\u00e1 a url abaixo para criar usu\u00e1rios por meio do aplicativo e iniciar r\u00e9plicas push\/pull:<\/p>\n<p>https:\/\/localhost:8000<\/p>\n<p>Crie outro usu\u00e1rio para testar se tudo est\u00e1 funcionando como esperado:<\/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>E para fazer login como esse usu\u00e1rio:<\/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>Na pr\u00f3xima se\u00e7\u00e3o, voc\u00ea criar\u00e1 um aplicativo Android simples com uma tela de login e inscri\u00e7\u00e3o para testar esses endpoints.<\/p>\n<h2>Aplicativo para Android<\/h2>\n<p>Abra o Android Studio e selecione <strong>Iniciar um novo projeto do Android Studio<\/strong> do <strong>In\u00edcio r\u00e1pido<\/strong> menu.<\/p>\n<p>Nomear o aplicativo <strong>SmartHome<\/strong>defina um dom\u00ednio da empresa e um local do projeto adequados e clique em <strong>Pr\u00f3ximo<\/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>Na caixa de di\u00e1logo Target Android Devices (Dispositivos Android de destino), certifique-se de marcar <strong>Telefone e tablet<\/strong>defina o SDK m\u00ednimo como <strong>API 22: Android 5.1 (Lollipop)<\/strong> para ambos, e clique em <strong>Pr\u00f3ximo<\/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>No dia seguinte <strong>Adicionar uma atividade ao Mobile<\/strong> selecione Add <strong>Atividade em branco<\/strong> e nomeie a atividade <strong>Atividade de boas-vindas<\/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 criar as funcionalidades de registro e login, voc\u00ea usar\u00e1 duas depend\u00eancias:<\/p>\n<ul>\n<li><strong>Biblioteca de suporte ao design do Android<\/strong>Para ter componentes de texto de entrada que sigam a especifica\u00e7\u00e3o do Material Design.<\/li>\n<li><strong>OkHttp<\/strong>para lidar com as solicita\u00e7\u00f5es POST para <code>\/signup<\/code> e <code>\/smarthome\/_session<\/code>.<\/li>\n<\/ul>\n<p>Em <code>build.gradle<\/code>adicione essas depend\u00eancias:<\/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>Em <code>activity_welcome.xml<\/code>Adicione o seguinte <strong>LinearLayout<\/strong> dentro do <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 os bot\u00f5es t\u00eam um <code>onClick<\/code> atributo. Mova o cursor do mouse sobre um dos m\u00e9todos e use o bot\u00e3o <code>alt + enter<\/code> &gt; <code>Criar openLoginActivity(view)<\/code> para criar esse m\u00e9todo no <code>WelcomeActivity<\/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>Fa\u00e7a o mesmo com o <strong>Registrar-se<\/strong> bot\u00e3o.<\/p>\n<p>Em seguida, crie duas novas classes e layouts XML usando o <strong>Atividade em branco<\/strong> modelo. Um deles deve ser chamado <code>Login<\/code> e o outro <code>Registrar-se<\/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>De volta ao <code>openLoginActivity<\/code> e <code>openSignUpActivity<\/code> adicione as seguintes inten\u00e7\u00f5es 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>Alterar a classe pai de <code>Login.java<\/code> e <code>SignUp.java<\/code> de <code>AppCompatActivity<\/code> para <code>Atividade<\/code>.<\/p>\n<p>Em <code>res\/values\/styles.xml (v21)<\/code>, altere o tema principal para <code>Theme.AppCompat.Light.DarkActionBar<\/code>.<\/p>\n<p>Aberto <code>activity_sign_up.xml<\/code> e adicione o seguinte dentro do <strong>RelativeLayout<\/strong> tag:<\/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>Agora, execute o aplicativo e selecione a op\u00e7\u00e3o <strong>Registrar-se<\/strong> voc\u00ea ver\u00e1 os elementos EditText do Material Design.<\/p>\n<p>Crie uma nova classe java chamada <code>Ajudante de rede<\/code> com o seguinte:<\/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 fazer uma solicita\u00e7\u00e3o HTTP em seu aplicativo Android, voc\u00ea precisa primeiro adicionar o <strong>Rede<\/strong> permiss\u00e3o em <code>AndroidManifest.xml<\/code>:<\/p>\n<pre><code class=\"language-xml\"><\/code><\/pre>\n<p>Agora de volta ao <code>SignUp.java<\/code>Adicione as seguintes propriedades:<\/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>Defina o <strong>EditText<\/strong> componentes no <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>Implementar o <code>registro<\/code> para enviar uma solicita\u00e7\u00e3o POST para <code>:8000\/assinatura<\/code> com o nome e a senha fornecidos:<\/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>Execute o aplicativo e digite um nome e uma senha. Se a conta de usu\u00e1rio tiver sido criada com sucesso, voc\u00ea receber\u00e1 de volta uma mensagem <code>201 Criado<\/code> e dever\u00e1 ver o usu\u00e1rio rec\u00e9m-criado no painel do administrador:<\/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 fim, vamos terminar com a tela de login. Em <code>activity_login.xml<\/code>, adicione o seguinte em <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>Adicione as propriedades 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>E fa\u00e7a a mesma opera\u00e7\u00e3o de vincula\u00e7\u00e3o de exibi\u00e7\u00e3o em <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>Implementar o <code>login<\/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>Execute o aplicativo e fa\u00e7a login com o nome de usu\u00e1rio e a senha que voc\u00ea escolheu anteriormente. Se a autentica\u00e7\u00e3o for bem-sucedida, voc\u00ea receber\u00e1 de volta um c\u00f3digo de status 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>OBSERVA\u00c7\u00c3O:<\/strong> Todos os SDKs do Couchbase Lite t\u00eam um m\u00e9todo no <code>Replica\u00e7\u00e3o<\/code> que recebe um nome e uma senha e realiza a autentica\u00e7\u00e3o para voc\u00ea, de modo que voc\u00ea provavelmente n\u00e3o precisar\u00e1 fazer essa solicita\u00e7\u00e3o POST para <code>\/smarthome\/_session<\/code>.<\/p>\n<h2>Conclus\u00e3o<\/h2>\n<p>Neste tutorial, voc\u00ea aprendeu a usar a API REST do Admin para criar usu\u00e1rios por meio de uma tela de inscri\u00e7\u00e3o em um aplicativo 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 v25.7.1 (Yoast SEO v25.7) - 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\/pt\/adding-user-sign-up-to-your-android-app-with-node-js-and-couchbase-mobile\/\" \/>\n<meta property=\"og:locale\" content=\"pt_BR\" \/>\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\/pt\/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\":\"pt-BR\",\"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\":\"pt-BR\",\"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\":\"pt-BR\",\"@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\":\"pt-BR\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\",\"name\":\"The Couchbase Blog\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@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\":\"pt-BR\",\"@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\/pt\/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\/pt\/adding-user-sign-up-to-your-android-app-with-node-js-and-couchbase-mobile\/","og_locale":"pt_BR","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\/pt\/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":"pt-BR","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":"pt-BR","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":"pt-BR","@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":"Blog do Couchbase","description":"Couchbase, o banco de dados 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":"pt-BR"},{"@type":"Organization","@id":"https:\/\/www.couchbase.com\/blog\/#organization","name":"Blog do Couchbase","url":"https:\/\/www.couchbase.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"pt-BR","@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, redator t\u00e9cnico, celular, Couchbase","image":{"@type":"ImageObject","inLanguage":"pt-BR","@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 \u00e9 o redator t\u00e9cnico respons\u00e1vel pela documenta\u00e7\u00e3o do Couchbase Mobile. Anteriormente, ele trabalhou como Developer Advocate e, antes disso, como desenvolvedor front-end da HouseTrip. Ele tamb\u00e9m gosta de escrever tutoriais sobre Android para raywenderlich.com em seu tempo livre.","url":"https:\/\/www.couchbase.com\/blog\/pt\/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","first_name":"James","last_name":"Nocentini","user_url":"","author_category":"","description":"James Nocentini \u00e9 o redator t\u00e9cnico respons\u00e1vel pela documenta\u00e7\u00e3o do Couchbase Mobile. Anteriormente, ele trabalhou como Developer Advocate e, antes disso, como desenvolvedor front-end da HouseTrip. Ele tamb\u00e9m gosta de escrever tutoriais sobre Android para raywenderlich.com em seu tempo livre."}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts\/1966","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/users\/51"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/comments?post=1966"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts\/1966\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/media\/13873"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/media?parent=1966"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/categories?post=1966"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/tags?post=1966"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/ppma_author?post=1966"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}