用于检查用户是否在Node.js重定向中进行身份验证的中间件

时间:2018-04-05 10:46:32

标签: node.js express next

成功登录后,我在Node express server中向用户提供60分钟的认证会话。如果我的react app中的用户想要获取子项列表,我必须检查身份验证,此处我有问题,我执行axios请求get并在我的文件app.js(node)中执行:

app.get('/childrenList', isUserLoggedIn, function(req, res, next){
    children.getChildrenList(req, res, next);
    });

我的函数是UserLoggedIn

function isUserLoggedIn(req, res, next) {
    if (!req.session.user_id || typeof(req.session.user_id)==='undefined') {      
        res.redirect('/login');            
        }
    else{
        next();
        }
    }

我的redux / actions函数

export function childrenList(objSql,type){
    return {
        type: type,
        payload: new Promise((resolve, reject)=>{
            axios.get('/childrenList', objSql,{
            })
            .then(function(response) {
                resolve(response);
                });
            })
        }
    }

如果用户刷新页面(重定向到'/login'),Eveythign工作正常,但如果用户只需点击按钮"获取儿童"会话过期后,节点将重定向到页面'/login'。我如何在session expired之后重定向?

2 个答案:

答案 0 :(得分:1)

因为您无法使用服务器重定向从React重定向。 见thread

答案 1 :(得分:1)

您必须在客户端处理它。在服务器响应中,抛出错误或发送正确的响应为"未经身份验证的"。在axios响应中,检查响应。如果响应为"未经身份验证",请清除会话/本地存储并将其重定向到" / login"。