nodejs express 做登录拦截

来源:互联网 发布:天猫搜索软件 编辑:程序博客网 时间:2024/06/07 05:30

利用 Express 中间件功能实现登录拦截。如果用户请求的路径需要登录后才能访问,将用户重定向到登录页面,登录成功后将用户重定向到原始请求路径。

设置应用中间件,监控所有请求

// app.jsapp.use(function (req, res, next) {  if (req.session.user) {  // 判断用户是否登录    next();  } else {    // 解析用户请求的路径    var arr = req.url.split('/');    // 去除 GET 请求路径上携带的参数    for (var i = 0, length = arr.length; i < length; i++) {      arr[i] = arr[i].split('?')[0];    }    // 判断请求路径是否为根、登录、注册、登出,如果是不做拦截    if (arr.length > 1 && arr[1] == '') {      next();    } else if (arr.length > 2 && arr[1] == 'user' && (arr[2] == 'register' || arr[2] == 'login' || arr[2] == 'logout')) {      next();    } else {  // 登录拦截      req.session.originalUrl = req.originalUrl ? req.originalUrl : null;  // 记录用户原始请求路径      req.flash('error', '请先登录');      res.redirect('/user/login');  // 将用户重定向到登录页面    }  }});

如果拦截规则复杂,可以将不被拦截的路径写入白名单,然后通过判断路径是否在白名单中来处理是否拦截;如果拦截规则简单,像以上代码中使用if else判断也可以满足要求。

登录成功后将用户重定向到原始请求路径

// routes/user.jsrouter.post('/login', function (req, res, next) {  // 判断用户名密码是否正确  ......  req.session.user = user;  // 将用户信息写入 session  if (req.session.originalUrl) {  // 如果存在原始请求路径,将用户重定向到原始请求路径    var redirectUrl = req.session.originalUrl;    req.session.originalUrl = null;  // 清空 session 中存储的原始请求路径  } else {  // 不存在原始请求路径,将用户重定向到根路径    var redirectUrl = '/';  }  res.redirect(redirectUrl);});


作者:段潇涵
链接:http://www.jianshu.com/p/947db5ed1af7
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。