Node.js 反应:如果在根目录下进行了身份验证,则呈现不同的组件

Node.js 反应:如果在根目录下进行了身份验证,则呈现不同的组件,node.js,reactjs,authentication,Node.js,Reactjs,Authentication,如果用户进行身份验证,我将尝试更改应用程序的根目录,以呈现不同的路由器。(公共营销网站,然后登录SAAS应用程序) 我当前的代码: class MainRouter extends React.Component { render() { if(isAuthenticated()) { return <AppRouter/> } else { return <FrontRouter/>

如果用户进行身份验证,我将尝试更改应用程序的根目录,以呈现不同的路由器。(公共营销网站,然后登录SAAS应用程序)

我当前的代码:

class MainRouter extends React.Component {
    render() {
        if(isAuthenticated()) {
            return <AppRouter/>
        } else {
            return <FrontRouter/>
        }
    }
}
考虑使用state(理想情况下使用hook,或者如果您觉得合适的话使用Redux)将JWT保存在内存中。其想法是在登录后立即存储它,并通过组件(或Redux)状态使其可用。然后在刷新页面时,状态仍将从localState或Cookie加载

其次,LocalStorage可以在不同的浏览器中执行不同的操作,隐私设置更是如此。考虑使用Cookie而不是本地存储,因为它的使用更加可预测和一致,加上安全风险或多或少相同。(下面的代码示例)

第三,我强烈建议从基于类的组件切换到基于函数的组件,以利用React的新Hooks API。这是一种更简单的管理状态的方法,可以为您节省许多代码行

// library imports
import React from 'react';
// component imports
import AppRouter from './AppRouter';
import FrontRouter from './FrontRouter';

// main
export default function MainRouter({isAuthenticated}) {
    return isAuthenticated ? <AppRouter/> : <FrontRouter/>
}
//库导入
从“React”导入React;
//部件进口
从“./AppRouter”导入AppRouter;
从“/FrontRouter”导入FrontRouter;
//主要
导出默认函数MainRouter({isAuthenticated}){
返回是否已验证?)

函数getCookie(cname){
变量名称=cname+“=”;
var decodedCookie=decodeURIComponent(document.cookie);
var ca=decodedCookie.split(“;”);

对于(var i=0;我感谢您如此详细的回答,这帮助我真正理解了这个问题。
// library imports
import React from 'react';
// component imports
import AppRouter from './AppRouter';
import FrontRouter from './FrontRouter';

// main
export default function MainRouter({isAuthenticated}) {
    return isAuthenticated ? <AppRouter/> : <FrontRouter/>
}
// in ParentComponent.jsx
// library imports
import React, {useState} from 'react';
// component imports
import MainRouter from './MainRouter';
// main component
export default function ParentComponent() {
    // set state here
    const defaultState = false;
    const [isAuthenticated, setIsAuthenticated] =useState(defaultState);
    return (
        <div className="ParentComponent" >
            <MainRouter isAuthenticated={isAuthenticated} />
        </div>
    )
}
function getCookie(cname) {
    var name = cname + "=";
    var decodedCookie = decodeURIComponent(document.cookie);
    var ca = decodedCookie.split(';');
    for(var i = 0; i <ca.length; i++) {
        var c = ca[i];
        while (c.charAt(0) == ' ') {
            c = c.substring(1);
        }
        if (c.indexOf(name) == 0) {
            return c.substring(name.length, c.length);
        }
    }
    return "";
}