1npm i express-iwt jsonwebtoken
1//utils.ts
2const jwt = require("jsonwebtoken")
3const jwtSecret: string = 'mb_own_token'; //token签名,自己随便定义就行
4
5export default class Utils {
6 static setToken = (username: string, user_id: string): Promise<String> => {
7 return new Promise(resolve => {
8 //expires 设置token过期的时间
9 //{ user_name: user_name, user_id: user_id } 传入需要解析的值( 一般为用户名,用户id 等)
10 //!!!重点 这个Bearer一定要加啊,,不然会报错
11 const token: string = 'Bearer ' + jwt.sign({
12 user_name: username,
13 user_id: user_id
14 }, jwtSecret, {expiresIn: '24h'});
15 resolve(token)
16 })
17 }
18 static getToken = (token: string): Promise<object> => {
19 return new Promise((resolve, reject) => {
20 if (!token) {
21 console.log('token是空的')
22 reject({
23 error: 'token 是空的'
24 })
25 } else {
26 //第二种 改版后的
27 const info = jwt.verify(token.split(' ')[1], jwtSecret);
28 resolve(info); //解析返回的值(sign 传入的值)
29 }
30 })
31 }
32}
1//user.ts
2import ex = require("express");
3let router = ex.Router();
4const userModel = require("./userModel");
5//引入
6import utils from "../tools/utils";
7
8interface userModelInstance {
9 username: string;
10 _id: string;
11 password?: string;
12}
13
14router.use((req, res, next) => {
15 console.log("请求的时间", Date.now());
16 next();
17});
18router.post("/login", (req, res) => {
19 let loginData = req.body
20 loginData.password = utils.genPassword(String(loginData.password))
21 userModel
22 .find(loginData)
23 .then((result: Array<userModelInstance>) => {
24 if (result.length > 0) {
25 let userOBJ: userModelInstance = Object.create(result[0]);
26 //登录成功生成签名,返回给前端
27 utils.setToken(userOBJ.username, userOBJ._id).then(token => {
28 res.send({
29 code: 200,
30 user: {username: userOBJ.username, _id: userOBJ._id},
31 message: '登录成功',
32 token: token
33 })
34 })
35 }else {
36 res.send({
37 code: 200,
38 message: '登录失败,瓜怂',
39 })
40 }
41 })
42 .catch((err: object) => {
43 console.error(err);
44 });
45});
46module.exports = router;
1// app.ts
2"use strict";
3import express = require("express");
4const app: express.Application = express();
5const bodyParser = require("body-parser");
6const expressJwt=require('express-jwt')
7import utils from "./tools/utils";
8app.use(bodyParser.json()); //解析json类型的请求体
9/*引入数据库操作的模块start*/
10const user = require('./user/user')
11/*数据库操作的模块end*/
12app.use(expressJwt({
13 secret:'mb_own_token',
14 algorithms:['HS256']
15}).unless({
16 path:['/user/login','/user/register'] //这里设置不需要验证的接口名称
17}))
18//开始校验token
19app.use((req,res,next)=>{
20 const token = req.headers['authorization'];
21 if(token == undefined){
22 next();
23 }else{
24 utils.getToken(token).then((data)=> {
25 next();
26 }).catch(()=>{
27 console.log(123)
28 next();
29 })
30 }
31})
32
33//挂载用户操作相关模块
34app.use('/user',user)
35//token失效返回信息
36app.use(function(err:any,req:any,res:any,next:any){
37 if(err.status==401){
38 return res.json({token:false,message:'token失效'})
39 //可以设置返回json 形式 res.json({message:'token失效'})
40 }
41})
42app.listen(process.env.PORT || 8000, function () {
43 console.log("Listen port:8000...");
44});
45```../../../src/components/Tag