node使用JsonWebToken 生成token,完成用户登录、登录检测

简介: 最近在用node做后台的登录,检测登录功能。在本地使用session可以成功,但是放服务器后发现session失效了,每次请求session都会变化,着了很久原因。原来,自己项目是前后端分离的,前端调用后端api接口,因此使用cors = require('cors')来解决了跨域问题,而跨域对于cookie来说,就是两个不同的网站,因此session会不停的变。

最近在用node做后台的登录,检测登录功能。在本地使用session可以成功,但是放服务器后发现session失效了,每次请求session都会变化,着了很久原因。原来,自己项目是前后端分离的,前端调用后端api接口,因此使用cors = require('cors')来解决了跨域问题,而跨域对于cookie来说,就是两个不同的网站,因此session会不停的变。

起因

最近在用node做后台的登录,检测登录功能。在本地使用session可以成功,但是放服务器后发现session失效了,每次请求session都会变化,着了很久原因。原来,自己项目是前后端分离的,前端调用后端api接口,因此使用cors = require('cors')来解决了跨域问题,而跨域对于cookie来说,就是两个不同的网站,因此session会不停的变。

解决方法

  • 设置一个nginx或者什么别的来做一下转发,避免跨域。可以弄一个nginx,设置8080,然后app指向3000,api指向1994。
  • 不使用session,而使用token来做api请求

    使用token

  • 导入模块
    npm install jsonwebtoken
  • 后台生成token并存入数据库里
//api.js
//登录
router.post('/api/admin/signIn',(req, res)=>{
    db.User.find({ name: req.body.name,password: req.body.password},(err, docs)=>{
        if (err) {
            res.send(err);
            return
        }
        if(docs.length>0){
            let content ={name:req.body.name}; // 要生成token的主题信息
            let secretOrPrivateKey="suiyi" // 这是加密的key(密钥) 
            let token = jwt.sign(content, secretOrPrivateKey, {
                    expiresIn: 60*60*1  // 1小时过期
                });

            docs[0].token = token    //token写入数据库
            db.User(docs[0]).save(function (err) {
                if (err) {
                res.status(500).send()
                return
                }
                res.send({'status':1,'msg':'登陆成功','token':token,'user_name':req.body.name})     //反给前台
            })
        }else{
            res.send({'status':0,'msg':'登录失败'});
        }
    })
})
  • 前台就可以获得token并存入localStorage了
//signin.vue
 this.$axios.post(webUrl+'api/admin/signIn', {'name': this.name, 'password': this.password})
        .then((response) => {
          if(response.data.status==1){
              localStorage.setItem('token', response.data.token);
              localStorage.setItem('user_name', response.data.user_name);
          }else{
            alert(response.data.msg)
          }
        })
        .catch((reject) => {
          console.log(reject)
        })
  • 后台检测token
//检测token
//api.js
router.post('/api/admin/checkUser',(req, res)=>{
    db.User.find({ name: req.body.user_name,token: req.body.token},(err, docs)=>{
        if (err) {
            res.send(err);
            return
        }
        if(docs.length>0){
            let token = req.body.token; // 从body中获取token
            let secretOrPrivateKey="suiyi"; // 这是加密的key(密钥) 

            jwt.verify(token, secretOrPrivateKey, function (err, decode) {
                if (err) {  //  时间失效的时候/ 伪造的token          
                    res.send({'status':0});            
                } else {
                    res.send({'status':1});
                }
            })
        }else{
            res.send({'status':0});            
        }
    })
})
  • 前台每次调用checkUser来检测登录就可以了,也可以每个接口都传token,后台验证;

    最后

    大家好,这里是「 TaoLand 」,这个博客主要用于记录一个菜鸟程序猿的Growth之路。这也是自己第一次做博客,希望和大家多多交流,一起成长!文章将会在下列地址同步更新……
    个人博客:www.yangyuetao.cn
    小程序:TaoLand

目录
相关文章
|
8月前
|
JSON 缓存 JavaScript
❤Nodejs 第十章(用户信息token认证和登录接口开发)
【4月更文挑战第10天】本文介绍了Node.js中实现用户信息token认证和登录接口的步骤。express-jwt的使用,接着创建基本的Express服务器,然后导入并使用jsonwebtoken和express-jwt。设置一个密钥,并定义一个中间件处理token验证。示例展示了登录接口的实现。遇到登录判断失效的问题后,对判断条件进行了优化。
282 2
|
2月前
|
监控 JavaScript Java
Node.js中内存泄漏的检测方法
检测内存泄漏需要综合运用多种方法,并结合实际的应用场景和代码特点进行分析。及时发现和解决内存泄漏问题,可以提高应用的稳定性和性能,避免潜在的风险和故障。同时,不断学习和掌握内存管理的知识,也是有效预防内存泄漏的重要途径。
182 52
|
3月前
|
JavaScript
Node.js单点登录SSO详解:Session、JWT、CORS让登录更简单(二)
Node.js单点登录SSO详解:Session、JWT、CORS让登录更简单(一)
73 0
|
3月前
|
存储 JSON JavaScript
Node.js单点登录SSO详解:Session、JWT、CORS让登录更简单(一)
Node.js单点登录SSO详解:Session、JWT、CORS让登录更简单(一)
143 0
|
4月前
|
存储 JSON 前端开发
node使用token来实现前端验证码和登录功能详细流程[供参考]=‘很值得‘
本文介绍了在Node.js中使用token实现前端验证码和登录功能的详细流程,包括生成验证码、账号密码验证以及token验证和过期处理。
87 0
node使用token来实现前端验证码和登录功能详细流程[供参考]=‘很值得‘
|
5月前
|
JavaScript 前端开发 Linux
【Azure 应用服务】NodeJS Express + MSAL 实现API应用Token认证(AAD OAuth2 idToken)的认证实验 -- passport.authenticate()
【Azure 应用服务】NodeJS Express + MSAL 实现API应用Token认证(AAD OAuth2 idToken)的认证实验 -- passport.authenticate()
|
5月前
|
JavaScript 安全 Linux
【Azure 应用服务】NodeJS Express + MSAL 应用实现AAD登录并获取AccessToken -- cca.acquireTokenByCode(tokenRequest)
【Azure 应用服务】NodeJS Express + MSAL 应用实现AAD登录并获取AccessToken -- cca.acquireTokenByCode(tokenRequest)
|
5月前
|
JavaScript Linux API
【Azure 应用服务】NodeJS Express + MSAL 应用实现AAD集成登录并部署在App Service Linux环境中的实现步骤
【Azure 应用服务】NodeJS Express + MSAL 应用实现AAD集成登录并部署在App Service Linux环境中的实现步骤
|
8月前
|
前端开发 中间件 关系型数据库
node注册和登录你真的清楚了吗?
本文档介绍了创建MySQL数据表、安装配置MySQL模块的过程,并详细阐述了用户注册和登录的功能实现。注册功能包括表单数据校验、用户名占用检测、密码加密及用户插入。登录功能涉及密码判断、生成JWT Token以及使用express-jwt中间件进行Token解析。在整个过程中,还封装了一个错误处理函数用于统一响应错误信息。
55 2
node注册和登录你真的清楚了吗?
|
8月前
|
安全 关系型数据库 MySQL
node实战——后端koa结合jwt连接mysql实现权限登录(node后端就业储备知识)
node实战——后端koa结合jwt连接mysql实现权限登录(node后端就业储备知识)
128 3