NodeJS如何用session控制接口的访问

问题描述

如果已知请求中不包含session,如何 拒绝访问 除了登录 以外 的接口?
前端框架用的是Vue

问题出现的环境背景及自己尝试过哪些方法

我用的办法是清除一个cookie字段,前端判断,如果没有这个字段,就跳转到登录页面,但是其实接口还是可以访问的。如何在后台控制,用户没有登录,就不能访问除了登录以外的其他接口呢?

if (!requestData.SESSION().user) {
    res.clearCookie('user', {'max-age':0});
    res.setHeader('Set-Cookie', 'user=true;path=/;max-age=0;');
    // res.setHeader('Set-Cookie', 'isVisit=true;path=/;max-age=0;');
    // res.json({message: 'please signin'})
}

相关代码

// 请把代码文本粘贴到下方(请勿用图片代替代码)

你期待的结果是什么?实际看到的错误信息又是什么?

1.如何在后台控制,用户没有登录,就不能访问除了登录以外的其他接口呢?
2.另外还有个问题,在后台如何能一次性清除多条Cookie呢?

阅读 2.7k
2 个回答

经过自己琢磨,请教他人后,放上自己写的
在 server 下封装

if (!requestData.SESSION().user && controller.auth > 1) { // req 和 session 都是公司大哥封装的。 auth 是给每个接口的权限控制,可以 分级控制 用户可访问的接口
    res.setHeader('Set-Cookie', ['user=true;path=/;max-age=0;', 'access=0;path=/;max-age=0;']); // 清除cookie
    responseData.renderJSON({code: 403, msg: 'do not have permission'}) // 返回403 权限错误
}

使用的express吗?

如果是的话,直接在所有请求前面增加一个 路由中间件做拦截处理,如果没有此SESSION,那么直接error或者其他处理,不要走 next 往下执行就可以 。

当然没有使用express也没关系,道理都是一样的,预先做请求拦截处理即可。

app.use((res, res, next) => {
    if (!requestData.SESSION().user){
        next('权限不足,请先登录...')
    }else{
        next()
    }
})
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题