{"id":1451,"date":"2026-10-15T23:20:56","date_gmt":"2026-10-16T02:20:56","guid":{"rendered":"https:\/\/www.bocaboca.net\/diveadvisor\/?page_id=1451"},"modified":"2026-10-15T23:20:56","modified_gmt":"2026-10-16T02:20:56","slug":"sign-in-log-in","status":"publish","type":"page","link":"https:\/\/www.bocaboca.net\/diveadvisor\/sign-in-log-in\/","title":{"rendered":"Sign-in\/Log-in"},"content":{"rendered":"<style>\n            .diveadvisor-auth { max-width: 360px; margin: 0 auto; }\n            .diveadvisor-auth-tabs { display: flex; gap: 20px; border-bottom: 1px solid #e5e7eb; margin-bottom: 16px; }\n            .diveadvisor-auth-tab {\n                padding: 10px 0; background: none; border: none; cursor: pointer;\n                color: #6b7280; font-size: 14px; font-weight: 600;\n            }\n            .diveadvisor-auth-tab-active { color: #042c53; border-bottom: 2px solid #042c53; }\n            .diveadvisor-auth-form { display: flex; flex-direction: column; gap: 12px; }\n            .diveadvisor-auth-form label { display: flex; flex-direction: column; gap: 4px; font-size: 13px; color: #374151; }\n            .diveadvisor-auth-form input {\n                padding: 8px 10px; border: 1px solid #d1d5db; border-radius: 6px; font-size: 14px;\n            }\n            .diveadvisor-auth-error {\n                background: #fef2f2; color: #991b1b; padding: 10px 12px; border-radius: 6px;\n                font-size: 13px; margin-bottom: 12px;\n            }\n            .diveadvisor-auth-or { text-align: center; margin: 16px 0 8px; color: #767676; }\n            .diveadvisor-auth-btn {\n                display: inline-block; padding: 10px 16px; border-radius: 6px; text-align: center;\n                background: #042c53; color: #fff; text-decoration: none; font-size: 14px; border: none; cursor: pointer; width: 100%;\n            }\n            .diveadvisor-auth-btn-google { background: #fff; color: #042c53; border: 1px solid #d1d5db; }\n        <\/style><div class=\"diveadvisor-auth\">    <div class=\"diveadvisor-auth-tabs\">\n        <button type=\"button\" class=\"diveadvisor-auth-tab diveadvisor-auth-tab-active\" data-tab=\"entrar\">Entrar<\/button>\n        <button type=\"button\" class=\"diveadvisor-auth-tab\" data-tab=\"cadastrar\">Cadastrar<\/button>\n    <\/div>\n\n    <div id=\"diveadvisor-auth-error\" class=\"diveadvisor-auth-error\" style=\"display:none;\"><\/div>\n\n    <form id=\"diveadvisor-auth-form-entrar\" class=\"diveadvisor-auth-form\">\n        <label>E-mail<input type=\"email\" name=\"email\" required autocomplete=\"email\"><\/label>\n        <label>Senha<input type=\"password\" name=\"password\" required autocomplete=\"current-password\"><\/label>\n        <button type=\"submit\" class=\"diveadvisor-auth-btn\">Entrar<\/button>\n    <\/form>\n\n    <form id=\"diveadvisor-auth-form-cadastrar\" class=\"diveadvisor-auth-form\" style=\"display:none;\">\n        <label>E-mail<input type=\"email\" name=\"email\" required autocomplete=\"email\"><\/label>\n        <label>Senha (m\u00ednimo 6 caracteres)<input type=\"password\" name=\"password\" minlength=\"6\" required autocomplete=\"new-password\"><\/label>\n        <button type=\"submit\" class=\"diveadvisor-auth-btn\">Criar conta<\/button>\n    <\/form>\n\n    <p class=\"diveadvisor-auth-or\">ou<\/p>\n    <button type=\"button\" id=\"diveadvisor-auth-google\" class=\"diveadvisor-auth-btn diveadvisor-auth-btn-google\">Continuar com Google<\/button>\n\n    <script src=\"https:\/\/www.gstatic.com\/firebasejs\/10.14.1\/firebase-app-compat.js\"><\/script>\n    <script src=\"https:\/\/www.gstatic.com\/firebasejs\/10.14.1\/firebase-auth-compat.js\"><\/script>\n    <script>\n    (function () {\n        firebase.initializeApp({\n            apiKey: \"AIzaSyDvYTS4ZbUIXse7aGf-BMhGbyYKs81taRE\",\n            authDomain: 'bab-dive-advisor.firebaseapp.com',\n            projectId: 'bab-dive-advisor',\n        });\n\n        var signinUrl = \"https:\\\/\\\/www.bocaboca.net\\\/diveadvisor\\\/wp-json\\\/diveadvisor\\\/v1\\\/auth\\\/firebase-signin\";\n        var fallbackRedirect = \"https:\\\/\\\/www.bocaboca.net\\\/diveadvisor\\\/\";\n        var errorBox = document.getElementById('diveadvisor-auth-error');\n        var formEntrar = document.getElementById('diveadvisor-auth-form-entrar');\n        var formCadastrar = document.getElementById('diveadvisor-auth-form-cadastrar');\n\n        function showError(message) {\n            errorBox.textContent = message;\n            errorBox.style.display = 'block';\n        }\n\n        function clearError() {\n            errorBox.style.display = 'none';\n        }\n\n        \/\/ Mensagens em pt-BR pros c\u00f3digos de erro mais comuns do Firebase\n        \/\/ Auth \u2014 qualquer c\u00f3digo n\u00e3o mapeado cai na mensagem gen\u00e9rica.\n        function translateFirebaseError(code) {\n            var messages = {\n                'auth\/email-already-in-use': 'Esse e-mail j\u00e1 tem uma conta. Tente a aba \"Entrar\".',\n                'auth\/invalid-email': 'E-mail inv\u00e1lido.',\n                'auth\/weak-password': 'Senha muito curta \u2014 use pelo menos 6 caracteres.',\n                'auth\/wrong-password': 'E-mail ou senha incorretos.',\n                'auth\/user-not-found': 'E-mail ou senha incorretos.',\n                'auth\/invalid-credential': 'E-mail ou senha incorretos.',\n                'auth\/too-many-requests': 'Muitas tentativas. Tente de novo mais tarde.',\n                'auth\/popup-closed-by-user': 'Login cancelado.',\n            };\n            return messages[code] || 'N\u00e3o foi poss\u00edvel completar. Tente de novo.';\n        }\n\n        \/\/ Entrar\/Cadastrar\/Google todos terminam aqui: qualquer um dos tr\u00eas\n        \/\/ devolve um UserCredential do Firebase com o mesmo formato\n        \/\/ (`.user.getIdToken()`), ent\u00e3o o resto do fluxo (mandar o ID token\n        \/\/ pro \/auth\/firebase-signin e redirecionar) \u00e9 id\u00eantico.\n        function finishSignin(credentialPromise) {\n            credentialPromise\n                .then(function (credential) { return credential.user.getIdToken(); })\n                .then(function (idToken) {\n                    return fetch(signinUrl, {\n                        method: 'POST',\n                        headers: { 'Content-Type': 'application\/json' },\n                        body: JSON.stringify({ id_token: idToken }),\n                    });\n                })\n                .then(function (response) {\n                    if (!response.ok) throw new Error('signin_failed');\n                    var redirectTo = new URLSearchParams(window.location.search).get('redirect_to');\n                    window.location.href = redirectTo || fallbackRedirect;\n                })\n                .catch(function (error) {\n                    showError(error && error.code ? translateFirebaseError(error.code) : 'N\u00e3o foi poss\u00edvel completar. Tente de novo.');\n                });\n        }\n\n        document.querySelectorAll('.diveadvisor-auth-tab').forEach(function (tab) {\n            tab.addEventListener('click', function () {\n                document.querySelectorAll('.diveadvisor-auth-tab').forEach(function (t) {\n                    t.classList.remove('diveadvisor-auth-tab-active');\n                });\n                tab.classList.add('diveadvisor-auth-tab-active');\n                formEntrar.style.display = tab.dataset.tab === 'entrar' ? '' : 'none';\n                formCadastrar.style.display = tab.dataset.tab === 'cadastrar' ? '' : 'none';\n                clearError();\n            });\n        });\n\n        formEntrar.addEventListener('submit', function (e) {\n            e.preventDefault();\n            clearError();\n            finishSignin(firebase.auth().signInWithEmailAndPassword(e.target.email.value, e.target.password.value));\n        });\n\n        formCadastrar.addEventListener('submit', function (e) {\n            e.preventDefault();\n            clearError();\n            finishSignin(firebase.auth().createUserWithEmailAndPassword(e.target.email.value, e.target.password.value));\n        });\n\n        document.getElementById('diveadvisor-auth-google').addEventListener('click', function () {\n            clearError();\n            finishSignin(firebase.auth().signInWithPopup(new firebase.auth.GoogleAuthProvider()));\n        });\n    })();\n    <\/script>\n    <\/div>\n","protected":false},"excerpt":{"rendered":"","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-1451","page","type-page","status-publish","hentry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.7 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Sign-in\/Log-in - Dive Advisor<\/title>\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.bocaboca.net\/diveadvisor\/sign-in-log-in\/\" \/>\n<meta property=\"og:locale\" content=\"pt_BR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Sign-in\/Log-in - Dive Advisor\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.bocaboca.net\/diveadvisor\/sign-in-log-in\/\" \/>\n<meta property=\"og:site_name\" content=\"Dive Advisor\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.bocaboca.net\\\/diveadvisor\\\/sign-in-log-in\\\/\",\"url\":\"https:\\\/\\\/www.bocaboca.net\\\/diveadvisor\\\/sign-in-log-in\\\/\",\"name\":\"Sign-in\\\/Log-in - Dive Advisor\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.bocaboca.net\\\/diveadvisor\\\/#website\"},\"datePublished\":\"2026-10-16T02:20:56+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.bocaboca.net\\\/diveadvisor\\\/sign-in-log-in\\\/#breadcrumb\"},\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.bocaboca.net\\\/diveadvisor\\\/sign-in-log-in\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.bocaboca.net\\\/diveadvisor\\\/sign-in-log-in\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"In\u00edcio\",\"item\":\"https:\\\/\\\/www.bocaboca.net\\\/diveadvisor\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Sign-in\\\/Log-in\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.bocaboca.net\\\/diveadvisor\\\/#website\",\"url\":\"https:\\\/\\\/www.bocaboca.net\\\/diveadvisor\\\/\",\"name\":\"Dive Advisor\",\"description\":\"O Dive Advisor \u00e9 uma plataforma que conecta mergulhadores a pontos de mergulho e fornecedores de equipamentos e servi\u00e7os subaqu\u00e1ticos. Nosso objetivo \u00e9 oferecer uma experi\u00eancia completa para quem ama o mundo marinho.\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.bocaboca.net\\\/diveadvisor\\\/#organization\"},\"alternateName\":\"Dive Advisor\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.bocaboca.net\\\/diveadvisor\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"pt-BR\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.bocaboca.net\\\/diveadvisor\\\/#organization\",\"name\":\"Dive Advisor\",\"url\":\"https:\\\/\\\/www.bocaboca.net\\\/diveadvisor\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\\\/\\\/www.bocaboca.net\\\/diveadvisor\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/www.bocaboca.net\\\/diveadvisor\\\/wp-content\\\/uploads\\\/2024\\\/05\\\/dive-advisor-v2.png\",\"contentUrl\":\"https:\\\/\\\/www.bocaboca.net\\\/diveadvisor\\\/wp-content\\\/uploads\\\/2024\\\/05\\\/dive-advisor-v2.png\",\"width\":1,\"height\":1,\"caption\":\"Dive Advisor\"},\"image\":{\"@id\":\"https:\\\/\\\/www.bocaboca.net\\\/diveadvisor\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/instagram.com\\\/dive.advisor\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Sign-in\/Log-in - Dive Advisor","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.bocaboca.net\/diveadvisor\/sign-in-log-in\/","og_locale":"pt_BR","og_type":"article","og_title":"Sign-in\/Log-in - Dive Advisor","og_url":"https:\/\/www.bocaboca.net\/diveadvisor\/sign-in-log-in\/","og_site_name":"Dive Advisor","twitter_card":"summary_large_image","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.bocaboca.net\/diveadvisor\/sign-in-log-in\/","url":"https:\/\/www.bocaboca.net\/diveadvisor\/sign-in-log-in\/","name":"Sign-in\/Log-in - Dive Advisor","isPartOf":{"@id":"https:\/\/www.bocaboca.net\/diveadvisor\/#website"},"datePublished":"2026-10-16T02:20:56+00:00","breadcrumb":{"@id":"https:\/\/www.bocaboca.net\/diveadvisor\/sign-in-log-in\/#breadcrumb"},"inLanguage":"pt-BR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.bocaboca.net\/diveadvisor\/sign-in-log-in\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.bocaboca.net\/diveadvisor\/sign-in-log-in\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"In\u00edcio","item":"https:\/\/www.bocaboca.net\/diveadvisor\/"},{"@type":"ListItem","position":2,"name":"Sign-in\/Log-in"}]},{"@type":"WebSite","@id":"https:\/\/www.bocaboca.net\/diveadvisor\/#website","url":"https:\/\/www.bocaboca.net\/diveadvisor\/","name":"Dive Advisor","description":"O Dive Advisor \u00e9 uma plataforma que conecta mergulhadores a pontos de mergulho e fornecedores de equipamentos e servi\u00e7os subaqu\u00e1ticos. Nosso objetivo \u00e9 oferecer uma experi\u00eancia completa para quem ama o mundo marinho.","publisher":{"@id":"https:\/\/www.bocaboca.net\/diveadvisor\/#organization"},"alternateName":"Dive Advisor","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.bocaboca.net\/diveadvisor\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pt-BR"},{"@type":"Organization","@id":"https:\/\/www.bocaboca.net\/diveadvisor\/#organization","name":"Dive Advisor","url":"https:\/\/www.bocaboca.net\/diveadvisor\/","logo":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.bocaboca.net\/diveadvisor\/#\/schema\/logo\/image\/","url":"https:\/\/www.bocaboca.net\/diveadvisor\/wp-content\/uploads\/2024\/05\/dive-advisor-v2.png","contentUrl":"https:\/\/www.bocaboca.net\/diveadvisor\/wp-content\/uploads\/2024\/05\/dive-advisor-v2.png","width":1,"height":1,"caption":"Dive Advisor"},"image":{"@id":"https:\/\/www.bocaboca.net\/diveadvisor\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/instagram.com\/dive.advisor"]}]}},"_links":{"self":[{"href":"https:\/\/www.bocaboca.net\/diveadvisor\/wp-json\/wp\/v2\/pages\/1451","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.bocaboca.net\/diveadvisor\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.bocaboca.net\/diveadvisor\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.bocaboca.net\/diveadvisor\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.bocaboca.net\/diveadvisor\/wp-json\/wp\/v2\/comments?post=1451"}],"version-history":[{"count":1,"href":"https:\/\/www.bocaboca.net\/diveadvisor\/wp-json\/wp\/v2\/pages\/1451\/revisions"}],"predecessor-version":[{"id":1452,"href":"https:\/\/www.bocaboca.net\/diveadvisor\/wp-json\/wp\/v2\/pages\/1451\/revisions\/1452"}],"wp:attachment":[{"href":"https:\/\/www.bocaboca.net\/diveadvisor\/wp-json\/wp\/v2\/media?parent=1451"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}