【问题标题】:REACTJS: How do I have multiple users on a web application?REACTJS:我如何在一个 Web 应用程序上拥有多个用户?
【发布时间】:2021-03-20 19:50:30
【问题描述】:

我试图弄清楚如何让三个用户访问我创建的 Web 应用程序。我希望有一个管理员用户、学生用户和公共用户。每个用户的导航栏中都有一组不同的页面。我已经能够为学生用户和公共用户设置导航,但我正在努力弄清楚如何添加管理员用户并在导航栏中为管理员用户配置特定页面。下面是代码:

App.js:

 
{/* using authcontext from the context api */}
export const authContext = createContext();

{/* hold the object for the authentication value */}
function ProvideAuth({ children, auth, setisAuth }) {
  const authValue = {
    auth,
    setisAuth
  };
  return (
    <authContext.Provider value={authValue}> {/* calling value from context api */}
      {children}
    </authContext.Provider>
  );
}

function App() {
  let isLoggedIn = localStorage.getItem('isauthenticated');

  {/* setting the state of isauth to the variable isLoggedin */}
  const [isAuth,setisAuth] = useState(isLoggedIn); 
  // const isLoggedIn = localStorage.getItem('isauthenticated');

  // let isLoggedIn; 

  // useEffect(() => {
  //   isLoggedIn = localStorage.getItem('isauthenticated');
  // })
  return (
    
<ProvideAuth auth={isAuth} setisAuth={setisAuth}>
    <Router> 
    <Navbar />  
    <Switch>
      <Route path="/" exact component={Home}/> 
      <Route path="/login" exact component={Login}/>
      {/* { isLoggedIn != "true" ? (<Route path="/login" exact component={Login}/>) : <></> } */}
      <Route path="/sign-up" exact component={SignUp}/> 
      <PrivateRoute path="/virtual-trip" exact component={VirtualTrip} isAuth={isAuth}/>
      <PrivateRoute path="/step1" exact component={Step1} isAuth={isAuth}/> 
      <PrivateRoute path="/step2" exact component={Step2} isAuth={isAuth} /> 
      <PrivateRoute path="/step3" exact component={Step3} isAuth={isAuth}/>
      <PrivateRoute path="/step4" exact component={Step4} isAuth={isAuth}/> 
      {/* <PrivateRoute path="/busconvo" exact component={BusConversation} isAuth={isAuth}/> */}
      <PrivateRoute path="/complete" exact component={CompleteTrip} isAuth={isAuth}/>
      <Route path="/contact" exact component={Contact}/> 
      <Route path="/resources" exact component={Resources} isAuth={isAuth}/>
      <Route path="/forgotPassword" exact component={ForgotPassword}/> 
      {/* <PrivateRoute path="/profile" component={Profile} /> */}
      <Route path="/resources" exact component={Resources}/> 
      <Route path="/about-me" exact component={AboutMe}/> 
      <PrivateRoute path="/scheduler" exact component={Scheduler} isAuth={isAuth}/> 
      <PrivateRoute path="/profile" exact component={Profile} isAuth={isAuth}/> 
      <Route path="/recruitment" exact component={Recruitment}/> 
      <Route path="/field-school" exact component={FieldSchool}/> 
      <Route path="/Home2" exact component={Home2}/> 
      <Route path="/video1" exact component={Video1} isAuth={isAuth} />
      <Route path="/video2" exact component={Video2} isAuth={isAuth}/>
      <Route path="/video3" exact component={Video3} isAuth={isAuth}/>
      <Route path="/video4" exact component={Video4} isAuth={isAuth}/>
      <Route path="/video5" exact component={Video5} isAuth={isAuth}/>
      <Route path="/video6" exact component={Video6} isAuth={isAuth}/>
      <Route path="/video7" exact component={Video7} isAuth={isAuth}/>
      <Route path="/video8" exact component={Video8} isAuth={isAuth}/>
      <Route path="/video9" exact component={Video9} isAuth={isAuth}/>
      <Route path="/taxiconvo" exact component={TaxiConversation} isAuth={isAuth}/>
      <Route path="/busconvo2" exact component={BusConvo2} isAuth={isAuth}/>
      <Route path="/student-scheduler" exact component={StudentScheduler} isAuth={isAuth}/>
      <Route path="/busconvo2spanish" exact component={BusConvo2Spanish} isAuth={isAuth}/>
      <Route path="/taxiconvospanish" exact component={TaxiConversationSpanish} isAuth={isAuth}/>


      <Route path="/resetPassword/:email/:token" exact component={ResetPassword}/> 
      <PrivateRoute path="/logout" exact component={Logout}/> 
      {/* <Route path="/Video" exact component={Video}/> */}
      {/* { isLoggedIn == "true" ? (<PrivateRoute path="/virtual-trip" exact component={VirtualTrip}/>) : <></> } */}

     <Route path="/resetPassword/:email/:token" exact component={ResetPassword}/> 
    </Switch>
    </Router>
</ProvideAuth> 
  );

  
}

export default App;

Login.js

const login = () => {
        Axios({
            method: "POST",
            data: {
                username: loginUsername,
                password: loginPassword,
            },
            withCredentials: true,
            url: "http://localhost:4000/login",
        }).then((res) => {
            console.log(res);
            setError(res.data);
            //Redirecting to home after successful authentication
            if(res.data === "Successfully authenticated!"){
                {/* setting the local storage item to true */}
                localStorage.setItem('isauthenticated', true); 
                {/* changing the global state to true as well */}
                auth.setisAuth(true); 
                history.push("/");
                // window.location.reload(false);
            }
        });
    };

Logout.js

const logout = () => {
        {/* removing the item from local storage */}
        localStorage.removeItem('isauthenticated');
        {/* setting global state to false because you're logged out */}
        auth.setisAuth(false); 
        history.push("/");
        // window.location.reload(false);
    }

Navigation.js

 <nav className="navbar"> 
        
            <div className = "navbar-container">
                <Link to="/" className="navbar-logo" onClick={closeMobileMenu}> 
                  WAYNE STATE UNIVERSITY  
                </Link>
                <div className='menu-icon' onClick={handleClick}> 
                <i className={click ? 'fas fa-times' : 'fas fa-bars'} /> 
                </div> 
               <ul className={click ? 'nav-menu active' : 'nav-menu'}> 

                <li className='nav-item'> 
                    <Link to='/recruitment' className='nav-links' onClick={closeMobileMenu}>
                        About 
                    </Link>
                </li> 

                 <li className='nav-item'> 
                    <Link to='/contact' className='nav-links' onClick={closeMobileMenu}>
                        Contact   
                    </Link>
                </li>  
                
                { !auth.auth ? ( <li className='nav-item'> 
                    <Link to='/sign-up' className='nav-links' onClick={closeMobileMenu}>
                        Sign-Up   
                    </Link>
                </li> ) : <></> }

                { !auth.auth  ? (  <li className='nav-item'> 
                    <Link to='/login' className='nav-links' onClick={closeMobileMenu} >
                        Login   
                    </Link>
                    </li> ) : <></>}
     
                { auth.auth ? ( <li className='nav-item'> 
                    <Link to='/virtual-trip' className='nav-links' onClick={closeMobileMenu}>
                        Virtual Trip
                    </Link>
                </li>  ) : <></> }

                { auth.auth ? ( <li className='nav-item'> 
                    <Link to='/resources' className='nav-links' onClick={closeMobileMenu}>
                        Resources
                    </Link>
                </li>  ) : <></> }
                
                { auth.auth ? ( <li className='nav-item'> 
                    <Link to='/scheduler' className='nav-links' onClick={closeMobileMenu}>
                        Scheduler
                    </Link>
                </li>  ) : <></> }
                
                <li className='nav-item'> 
                    <Link to='/about-me' className='nav-links' onClick={closeMobileMenu}>
                        About Director 
                    </Link>
                </li> 

                { auth.auth ? ( <li className='nav-item'> 
                <Link to='/' className='nav-links' onClick={logout}>
                    Logout  
                </Link>
                </li> ) : <></> }

                { auth.auth  ? ( <li className='nav-item'> 
                    <Link to='/profile' className='nav-links' onClick={closeMobileMenu}>
                    <i className="fas fa-user"></i>  
                    </Link>
                </li>  ) : <></> }

                
              </ul> 
            </div> 
            
        </nav>

【问题讨论】:

    标签: javascript reactjs web-applications enums react-router


    【解决方案1】:

    您是否使用某种数据库来存储用户?如果是这样,您可以在登录后检查角色,然后显示管理员、用户等的内容......这可以通过条件逻辑来完成,例如。

    user === 'admin' ? <p>Admin page</p> : <p>Student page</p>
    

    【讨论】:

      猜你喜欢
      • 2010-10-08
      • 1970-01-01
      • 2011-03-19
      • 1970-01-01
      • 1970-01-01
      • 2014-05-29
      • 2017-01-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多