繁体   English   中英

使用 Firebase web 的用户信息显示错误

[英]User info display error using Firebase web

我试图让我的用户保持登录状态并在登录后显示他们的数据。我收到了当前错误。 我不确定是什么导致了这个错误:

未捕获的语法错误:无法在模块外使用 import 语句

这是我当前的 function 代码。 这是我的 HTML 和 javascript 的所有代码:

HTML:

<!doctype html>
<html>
  
  <head>
    <!---Required meta tags--->
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <link rel="stylesheet" href="CSS/studiodash.css">
  
    <!---Required meta tags--->

    <!---Like Button JavaScript--->
    <script src="https://kit.fontawesome.com/f6dcf461c1.js" crossorigin="anonymous"></script>
    
    <!---Bootstrap CSS--->
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3"
    crossorigin="anonymous">

    <title>StudioPick</title>
    <script>
      

      // SignOut
      function signOut() {
          auth.signOut();
          alert("SignOut Successfully from System");

          window.location.href ="login.html?error";
          alert("No active user please sign or sign up.");
      }
  

    </script>
    
  </head>

  <body>
    <!---Navbar--->
    <header>
      <nav class="navbar navbar-expand-lg navbar-light">
        <div class="container-fluid">
          <a style="font-size: 45px; color: #A388E7;" class="navbar-brand" href="#"><strong>StudioPick</a>
            <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
              <span class="navbar-toggler-icon"></span>
            </button>
            <div class="collapse navbar-collapse" id="navbarSupportedContent">
              <ul class="navbar-nav ms-auto mb-2 mb-lg-0">
                <li class="nav-item">
                  <a class="nav-link active" aria-curresnt="page" href="index.html">Home</a>
                </li>
                <li class="nav-item2">
                  <div class="action">
                    <div class="profile" onclick="menuToggle();">
                      <img src="./assets/avatar.jpg" />
                    </div>
                    <div class="menu">
                      <h3 id="profile-name"><strong>User Name</strong></h3>
                      <p class="text-muted" id="userType" style="position: relative; top: -20px; right: -51px; font-size: 10px !important">profile type</p>
                      <ul>
                        <li>
                          <img src="./assets/icons/user.png" /><a href="studiodash.html">Dashboard</a>
                        </li>
                        <li>
                          <img src="./assets/icons/edit.png" /><a href="editprofile.html">Edit profile</a>
                        </li>
                        <li>
                          <img src="./assets/icons/envelope.png" /><a href="#">Inbox</a>
                        </li>
                        <li>
                          <img src="./assets/icons/settings.png" /><a href="#">Setting</a>
                        </li>
                        <li><img src="./assets/icons/question.png" /><a href="#">Help</a></li>
                        <li>
                          <img src="./assets/icons/log-out.png" /><a href="#" onclick="signOut();">Logout</a>
                        </li>
                      </ul>
                    </div>
                  </div>
                </li>
              </ul>
            </div>
        </div>
      </nav>
    </header>
    <!---Navbar--->

    
    <!---Dashboard Body--->
    <div class="container" id="dashboard">
      <h1 class="page-title"><strong>Studio Dashboard</strong></h1>
      <!---Booking Calendar--->
      <div class="notifications">
        <div class="card-body">
          <h5 class="card-title text-muted"><strong>Schedule</strong></h5>
        </div>




        <button class="calendar-view">View Full Calendar</button>
      </div>
      <!---Booking Calendar--->
      <!---Edit Profile--->
      <div class="edit-profile" id="edit-profile">
        <div class="card-body">
          <form id="studioForm">
            <h5 class="card-title text-muted"><strong>Edit Profile</strong></h5>
            <p class="profile-title" id="studioName"><b>Enter Studio Name</b></p>
            <p class="profile-location" id="profile-location">Bethesda, MD</p>
            <img class="star" src="Images/Star.png">
            <p class="profile-rating" id="profile-rating">4.25</p>
            <p class="profile-reviews" id="profile-reviews">8 reviews</p>
            
            <img class="card-img-bottom" id="profile-image" src="Images/placeholder.png">

            <button type="button" id="editprofilebutton" onclick="window.location.href='editprofile.html'">Edit Profile</button>
          </form>
        </div>
      </div>
      <!---Edit Profile--->
      <!---Current Session--->
      <div class="session-info">
        <div class="card-body">
          <h5 class="card-title text-muted"><strong>Current Session</strong></h5>
          <div class="current-client">
            
            
          </div>
          <p class="current-date text-muted">Date:</p>
            <p class="todays-date">08/30/2022</p>
          <p class="current-service text-muted">Service:</p>
            <p class="todays-service">W Engineer</p>
          <p class="current-room text-muted">Room:</p>
          <p class="todays-room">A</p>
          <p class="current-duration text-muted">Duration:</p>
            <p class="todays-duration">3 hours</p>
          <p class="current-start-time text-muted">Start Time:</p>
          <p class="todays-start-time">4:00 pm</p>
          <p class="current-end-time text-muted">End Time:</p>
            <p class="todays-end-time">7:00 pm</p>
        </div>
      </div>
      <!---Current Session--->
      <!---Payment History--->
      <div class="payment-history">
        <div class="card-body">
          <h5 class="card-title text-muted"><strong>Payment History</strong></h5>
          <div class="transaction">
            <p class="customer">- Highway</p>
            <p class="payment">+ $1,000</p>
          </div>
          <div class="transaction-two">
            <p class="customer2">- TyFontaine</p>
            <p class="payment2">+ $1,000</p>
          </div>
          <button class="history-view">View Payment History</button>
        </div>
      </div>
      <!---Payment History--->
      <!---Upcoming Sessions--->
      <div class="sessions">
        <div class="card-body">
          <h5 class="card-title text-muted"><strong>Upcoming Sessions</strong></h5>
          <div class="new-session">
            <p class="session-price">$100</p>
            <p class="customer-name">Grmln!</p>
            <p class="session-room text-muted">Room A: </p>
            <p class="session-type text-muted">No Engineer</p>
            <p class="session-length text-muted">2:00 pm - 4:00 pm</p>
            <p class="session-date text-muted">08/27/2022</p>
          </div>
          <div class="new-session2">
            <p class="session-price2">$100</p>
            <p class="customer-name2">Grmln!</p>
            <p class="session-room2 text-muted">Room A: </p>
            <p class="session-type2 text-muted">No Engineer</p>
            <p class="session-length2 text-muted">2:00 pm - 4:00 pm</p>
            <p class="session-date2 text-muted">08/27/2022</p>
          </div>
          <div class="new-session3">
            <p class="session-price3">$100</p>
            <p class="customer-name3">Grmln!</p>
            <p class="session-room3 text-muted">Room A: </p>
            <p class="session-type3 text-muted">No Engineer</p>
            <p class="session-length3 text-muted">2:00 pm - 4:00 pm</p>
            <p class="session-date3 text-muted">08/27/2022</p>
          </div>
          <button class="upcoming-view">View Upcoming Sessions</button>
        </div>
      </div>
    <!---Upcoming Sessions--->
    <!---Session Status--->
    <div class="session-status">
      <div class="card-body">
        <h5 class="card-title text-muted"><strong>Session Status</strong></h5>
        <div class="session-option">
          <button class="accept-button">Accept</button>
          <button class="reject-button">Reject</button>
          <button class="change-button">Change Time/Date</button>
        </div>
      </div>
    </div>
    <!---Session Status--->
    <!---Pending Sessions--->
    <div class="pending-sessions">
      <div class="card-body">
        <h5 class="card-title text-muted"><strong>Pending Sessions</strong></h5>
        <div class="pending">
            <p class="pending-session-price">$100</p>
            <p class="pending-customer-name">Joony</p>
            <p class="pending-session-room text-muted">Room A: </p>
            <p class="pending-session-type text-muted">No Engineer</p>
            <p class="pending-session-length text-muted">2:00 pm - 4:00 pm</p>
            <p class="pending-session-date text-muted">08/27/2022</p>
          </div>
        </div>
        <div class="pending2">
            <p class="pending-session-price2">$100</p>
            <p class="pending-customer-name2">Tae Dawg</p>
            <p class="pending-session-room2 text-muted">Room D: </p>
            <p class="pending-session-type2 text-muted">With Engineer</p>
            <p class="pending-session-length2 text-muted">2:00 pm - 4:00 pm</p>
            <p class="pending-session-date2 text-muted">09/27/2022</p>
        </div>
        <button class="pending-view">View Pending Sessions</button>
      </div>
    </div>
    <!---Pending Sessions--->
    <!---Edit Prices--->
    <div class="edit-prices">
      <div class="card-body">
        <h5 class="card-title text-muted"><strong>Edit Prices</strong></h5>
        <div class="roomA">
          <p class="description-one">Room A:</p>
          <p class="type text-muted">With Engineer</p>
          <p class="dollarsign-one">$</p>
          <p class="price-one">45</p>
          <p class="time-type">/Hr</p>
        </div>
        <div class="roomB">
          <p class="description-two">Room B:</p>
          <p class="type2 text-muted">With Engineer</p>
          <p class="dollarsign-two">$</p>
          <p class="price-two">50</p>
          <p class="time-type2">/Hr</p>
        </div>
        <button class="editPrice-button">Edit Prices</button>
      </div>
    </div>
    <!---Edit Prices--->
    <!---Messages--->
    <div class="messages">
      <div class="card-body">
        <h5 class="card-title text-muted"><strong>Messages</strong></h5>
        <div class="notification-one">
          <p class="person-one">Chris Brown</p>
          <p class="text-one text-muted">I'm omw. 20 mins out. I ran into some traffic bc of this real bad accident. If I don't get there in time, I'll pay extra. </p>
          <p class="time-occurred-one text-muted">3 min ago</p>
        </div>
        <div class="notification-two">
          <p class="person-two">Kanye West</p>
          <p class="text-two text-muted">I'm omw. 45 mins out. I ran into some traffic bc of this real bad accident. If I don't get there in time, I'll pay extra. </p>
          <p class="time-occurred-two text-muted">12 min ago</p>
        </div>
        <button class="view-messages">View Messages</button>
      </div>
    </div>
    <!---Messages--->
    <!---Footer--->
    <footer class="my-5 pt-5 text-muted text-center text-small">
      <p class="mb-1">© 2022 StudioPick.</p>
      <ul class="list-inline">
        <li class="list-inline-item"><a href="#">Privacy</a></li>
        <li class="list-inline-item"><a href="#">Terms</a></li>
        <li class="list-inline-item"><a href="#">Support</a></li>
      </ul>
    </footer>
    <!---Footer--->
    <!---Dashboard Body--->

    <script>
      function menuToggle() {
        const toggleMenu = document.querySelector(".menu");
        toggleMenu.classList.toggle("active");
      }
    </script>

    <!-- The core Firebase JS SDK is always required and must be listed first -->
    <script src="https://www.gstatic.com/firebasejs/8.10.1/firebase-app.js"></script>

    <!-- TODO: Add SDKs for Firebase products that you want to use -->
    <script src="https://www.gstatic.com/firebasejs/8.10.1/firebase-auth.js"></script>
    <script src="https://www.gstatic.com/firebasejs/8.10.1/firebase-database.js"></script>

    <!---Javascript--->
    <script src="Javascript/studiodash.js"></script>
    <!---Javascript--->
    
    <!----More Bootstrap--->
    <script src="https://cdn.jsdelivr.net/npm/@popperjs/core@2.10.2/dist/umd/popper.min.js" integrity="sha384-7+zCNj/IqJ95wo16oMtfsKbZ9ccEh31eOz1HGyDuCQ6wgnyJNSYdrPa03rtR1zdB" crossorigin="anonymous"></script>
    <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.min.js" integrity="sha384-QJHtvGhmr9XOIpI6YVutG+2QOK9T+ZnN4kzFN1RtK3zEFEIsxhlmWl5/YESvpZ13" crossorigin="anonymous"></script>
    <!----More Bootstrap--->
  </body>
</html>

JS:

// Initialize Firebase
firebase.initializeApp(firebaseConfig);

// Initialize variables
const database = firebase.database();

import { getAuth, onAuthStateChanged } from "firebase/auth";

const auth = getAuth();
onAuthStateChanged(auth, (user) => {
  if (user) {
    database.ref('/studiopick/studio/users/' + user.uid).get().then(snapshot =>{
      document.getElementById("studioName").innerText = snapshot.val().studioName;
      document.getElementById("profile-name").innerText = snapshot.val().studioName;

      
    }).catch(e => {console.log(e)})
    // ...
  } else {
    window.location.href ="login.html?error";
    alert("No active user please sign or sign up.");
  }
});

您实际上是在混合 JS SDK 版本 8 和 9。

使用<script src="https://www.gstatic.com/firebasejs/8.10.1/firebase-app.js"></script>导入 V8 SDK,

但以下代码是 V9 语法

const auth = getAuth();
onAuthStateChanged(auth, (user) => {...});

以下代码是 V8 语法...

database.ref('/studiopick/studio/users/' + user.uid).get()...

您可以继续使用 SDK V8,如下所示:

JS

    const firebaseConfig = {
       //...
    };
    
    // Initialize Firebase
    firebase.initializeApp(firebaseConfig);
        
    //const auth = getAuth();
    firebase.auth().onAuthStateChanged((user) => {
        if (user) {
            database.ref('/studiopick/studio/users/' + user.uid).get().then(snapshot => {
                document.getElementById("studioName").innerText = snapshot.val().studioName;
                document.getElementById("profile-name").innerText = snapshot.val().studioName;


            }).catch(e => { console.log(e) })
            // ...
        } else {
           window.location.href = "login.html?error";
           alert("No active user please sign or sign up.");
        }
   });

HTML

    // ....

    <!-- The core Firebase JS SDK is always required and must be listed first -->
    <script defer src="https://www.gstatic.com/firebasejs/8.10.1/firebase-app.js"></script>

    <!-- TODO: Add SDKs for Firebase products that you want to use -->
    <script defer src="https://www.gstatic.com/firebasejs/8.10.1/firebase-auth.js"></script>
    <script defer src="https://www.gstatic.com/firebasejs/8.10.1/firebase-database.js"></script>

    <!---Javascript--->
    <script defer src="Javascript/studiodash.js"></script>
    <!---Javascript--->
    
    <!----More Bootstrap--->
    // ...
    <!----More Bootstrap--->
  </body>
</html>

或者改成V9,推荐的,如下:

JS

    import { initializeApp } from 'https://www.gstatic.com/firebasejs/9.9.4/firebase-app.js';

// Add Firebase products that you want to use

    import { getAuth, onAuthStateChanged } from 'https://www.gstatic.com/firebasejs/9.9.4/firebase-auth.js';
    import { getDatabase, ref, get } from "https://www.gstatic.com/firebasejs/9.9.4/firebase-database.js"
    
    const firebaseConfig = {
       //...
    };
    
    
    const app = initializeApp(firebaseConfig);
    const auth = getAuth(app);
    const database = getDatabase(app);
    
    onAuthStateChanged(auth, (user) => {
        if (user) {
            // See documentation for V9
            // https://firebase.google.com/docs/database/web/read-and-write#read_data_once
    
            // ...
        } else {
            window.location.href = "login.html?error";
            alert("No active user please sign or sign up.");
        }
    });

HTML

    // ...

    <!---Javascript--->
    <script type="module" src="Javascript/studiodash.js"></script>
    <!---Javascript--->
    
    <!----More Bootstrap--->
    // ...
    <!----More Bootstrap--->
  </body>
</html>

文档中的更多详细信息:

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM