状态保持
1、session
2、jsonwebtoken(jwt)
实现步骤如下:
npm i jsonwebtoken express-jwt --save
a/登录成功生成并下发token(代理服务器):
let jwt = require("jsonwebtoken");
let secretKey = "服务器需要保存的一个密钥";
if([成功]){
//生成token
let token =jwt.sign(
{}, // payload
secretKey, //服务器密钥
{
expiresIn: 60*60*1 //过期时间
}
)
//下发token
res.send({token,isLogin:true});
}else{
res.send({isLogin:false});
}
b/客户端接收到token并保存
你的登录页面, ***.html
function login(){
$ajax({
url:"***/login",
data:{username:"zs",password:"123"},
type:"post",
success({isLogin,token}){
if(isLogin){ //success
localStorage.setItem("user_token",token);//保存token
//***
//*** 做其他成功的事情
//***
}else{
//***
//*** 做其他失败的事情
//***
}
}
});
}
c/其他任何时期,需要携带token的ajax请求的实现
//你需要登录状态保持的页面(也就是需要权限的页面) ***.html
$.ajaxSettings.beforeSend = function (xhr, request) {
const user_token = window.localStorage.getItem('key');
xhr.setRequestHeader('Authorization', `Bearer ${user_token}`);
}
d/对于请求进行校验
//./app.js 校验中间件注册的位置一定要满足能够拦截需要权限的路劲
const jwt = require("express-jwt"); app.use(express.static(path.join(__dirname, "public"))); app.use(function (req, res, next) {
next();
}); app.use(jwt({
secret: secretKey,
credentialsRequired: true
}).unless({
path: ['/users/login', '/users/reg/']
})); app.use('/api', exampleProxy);
3、密码加密
const crypto = require('crypto');
const data = {
MD5_SUFFIX: 'SB_key',
md5: (pwd) => {
let md5 = crypto.createHash('md5');
return md5.update(pwd + data.MD5_SUFFIX).digest('hex');
},
secretKey: 'SB_key'
}; module.exports = data;
let {
secretKey,
md5
} = require('../util/salt');
);
3、密码加密
```js
const crypto = require('crypto');
const data = {
MD5_SUFFIX: 'SB_key',
md5: (pwd) => {
let md5 = crypto.createHash('md5');
return md5.update(pwd + data.MD5_SUFFIX).digest('hex');
},
secretKey: 'SB_key'
}; module.exports = data;
let {
secretKey,
md5
} = require('../util/salt');