token
身份验证 token
- 前端自动登录
- OpenSSL + perl软件安装: https://blog.csdn.net/sunhuansheng/article/details/82218678
- OpenSSl 、 Perl这个软件安装无要求,一路next
- 先装Perl,在装OpenSSl
- 检查你的环境变量中的系统变量是否有这两个软件的启动路径
- 先构建前端页面,发送请求
$('button').on('click',function () { $.ajax({ url: 'http://localhost:3000/login', method: 'POST', data: { username: $('#username').val(), password: $('#password').val(), token: localStorage.getItem('token') // 当第一次发送登录请求式,我们携带一个token参数,就是要告诉后端,我是第一次登录,我需要token字符做后期自动登录 }, success: function ( res ) { if ( res ) { const result = JSON.parse( res ) localStorage.setItem('token',result.token ) location.href = "./index.html" } } })
})
2. 使用express搭建路由写接口,以模块化形式导出,创建路由中间件
3. 解决跨域问题 res.setHeader('A-C-A-O','*'),req.body得到前端发送的数据
4. 新建rsa文件夹创建两个文件,一个私钥一个公钥。通过私钥产生token,通过公钥解密token。
```js
// 1.产生公钥和私钥
// 产生私钥 openssl genrsa -out ./private_key.pem 1024 1024 代表私钥长度
// 产生公钥 openssl rsa -in ./private_key.pem -pubout -out ./public_key.pem
- 通过文件系统把私钥和公钥里面的内容读出来
const privateKey = fs.readFileSync( path.join( __dirname,'../rsa/private_key.pem') )
const publicKey = fs.readFileSync( path.join( __dirname, '../rsa/public_key.pem' ))
- 通过引入jwt这个工具,将用户信息和私钥结合进行加密:
- $ npm install jaonwebtoken -s
// 通过jwt将用户名和私钥结合 ,然后在通过RS256加密算法,输出最终的token const token = jwt.sign( username, privateKey, { algorithm: 'RS256' }) /* 通过public进行解密 const newToken = 'eyJhbGciOiJSUzI1NiJ9.MTE.SrtxG9-mwK2MGWL4vrJjq9FAghlL3-daZUV9hUA3yOrnMGXFLVKE8Zwj90f0eB02D7nfclYd1PN8DGcQS62u8Qc8CGSbtERoSJuDG_D1fXR-my3HmzXAVPkxde5e7764_bYaZ85atn15B3LLUZiQMYfryGS2z4DJ58-J3RylhgY' const decode = jwt.verify( newToken,publicKey ) console.log( decode ) */
- 把token发给前端,前端存到cookie里
- 取token,如果有直接跳转到首页
function load () {
const token = localStorage.getItem('token')
if ( token ) {
//条件成立,证明token存在
setTimeout(function () {
location.href = './index.html'
},1000)
} else {
alert( '用户民或是密码过期了,请重新登录' )
}
}
$('button').on('click',function () {
$.ajax({
url: 'http://localhost:3000/login',
method: 'POST',
data: {
username: $('#username').val(),
password: $('#password').val(),
token: localStorage.getItem('token') // 当第一次发送登录请求式,我们携带一个token参数,就是要告诉后端,我是第一次登录,我需要token字符做后期自动登录
},
success: function ( res ) {
if ( res ) {
const result = JSON.parse( res )
localStorage.setItem('token',result.token )
location.href = "./index.html"
}
}
})
})