token使用流程

这篇博客详细介绍了token的使用场景,如无状态请求、保持登录状态和第三方登录。接着,它提供了token的使用步骤,包括安装openssl和perl,生成私钥和公钥,使用jsonwebtoken生成token,并在前后端交互中应用。此外,还讨论了如何在express中使用session存储和验证token。
摘要由CSDN通过智能技术生成
  1. token1.1 token的使用场景
    1. 无状态请求

保持用户的登录状态
3.
第三方登录(token+auth2.0)

1.2 token使用流程
1.
先安装openssl( https://blog.csdn.net/sunhuansheng/article/details/82218678 )

	* 

先安装perl

		* 

重启电脑
*
进行 C:\Perl64\eg
*
以管理员身份运行 perl --help

			* 

报错( perl没有配置环境变量 )
*
安装openssl

		* 

软件安装无要求,一路next
*
重启电脑
*
然后在命令终端输入openssl,发现报错openssl命令未找到

			* 

配置全局的环境变量
*
在命令终端继续输入openssl,然后报警告:WARNING: can’t open config file: /usr/local/ssl/openssl.cnf

			* 

在你得opensll安装路径下找到openssl.cfg,我的路径是 C:\OpenSSL-Win64\bin\openssl.cfg,设置环境变量 $ set OPENSSL_CONF=C:\OpenSSL-Win64\bin\openssl.cfg
*
继续输入openssl $ openssl $ OpenSSL>
*
注意: 以上两个软件下载是需要翻墙的
2.
先使用express创建项目
3.
打造了一个login的post接口
4.
使用openssl生成一个私钥

	* 

要进入某一个项目文件夹中生成 $ openssl genrsa -out ./private_key.pem 1024
5.
使用openssl生成公钥 $ openssl rsa -in ./private_key.pem -pubout -out ./public_key.pem
6.
安装jsonwebtoken $ cnpm i jsonwebtoken -D
7.
通过私钥生成token

let private_key=fs.readFileSync(path.join(__dirname,’./private_key.pem’))
var token = jwt.sign(palyload, private_key,{ algorithm: ‘RS256’});
8.
前端发送ajax时要发送一个token

submit.onclick = function () {
$.ajax({
url: ‘http://localhost:3000/login’,
data: {
username: username.value,
password: password.value,
token: localStorage.getItem(‘token’) //用封装的获取cookie的方法来取
},
method: ‘POST’,
success ( res ) {
console.log( res )
const result = JSON.parse( res )

localStorage.setItem(‘token’,result.auth)

}
})
}
1.
后端接收前端发来的token,做登录判断
2.
前端存储token

1. 

或者也可以用后端存储token

// 我们使用express-session来存储

// 1. 在app.js中设置express-session

app.use(session({
secret: ‘keyboard cat’,
resave: false,
saveUninitialized: true,
cookie: { secure: true }
}))

// 2. 在你的接口中 做 req.session的值设置

const { username,password,token } = req.body
if( !token ){
//当前条件成立,证明用户是第一次登录( 一个cookie周期 )
req.session.token = jwt_token //jwt_token是我们通过使用jsonwebtoken + openssl定义的私钥 来生成的
}else{
//当前条件不成立,证明用户已经不是第一次登录( 一个cookie周期 )
//如果cookie时间周期到了,那么我们将token清除掉

var timeTap = Date.now() //当前时间戳

var fuTimeTap = (new Data( req.session.cookie._expires )).getTime()

if( fuTimeTap - timeTap === req.session.cookie.originalMaxAge ){
req.session.token = ‘’
}

}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值