Express项目中: JWT使用方法

安装express-jwt

npm install express-jwt --save
npm install jsonwebtoken --save

配置jwt (app.js)

var expressJwt = require("express-jwt");
// jwt中间件
app.use(expressJwt({
  credentialsRequired: false,//关键
    secret: "yousecret"//加密密钥,可换
}).unless({
    path: ["/api/login","/api/addUser","/api/test"]//添加不需要token验证的路由 
}));

生成token

const jwt = require('jsonwebtoken')
//api/v1/login
app.post('/login', function (req, res) {
  User.findOne({userName:req.body.username,password:req.body.password}).then(result => {
      if(result){
        // 注意默认情况 Token 必须以 Bearer+空格 开头
        const token = 'Bearer ' + jwt.sign(
          {
            _id: user._id,
            admin: user.role === 'admin'
          },
          'secret12345',
          {
            expiresIn: 3600 * 24 * 3
            //or 
            //expiresIn: "10 days"
          }
        )
        res.json({
          status: 'ok',
          token: token 
        })
    } else {
      res.json({
        code: 250,
        msg: '用户名或密码不正确'
      })
    };
  })
}

vue前端路由守卫限制

// JWT 用户权限校验,判断 TOKEN 是否在 localStorage 当中
router.beforeEach(({name}, from, next) => {
  // 获取 JWT Token
  if (localStorage.getItem('token')) {
    // 如果用户在login页面
    if (name === 'login') {
      next('/');
    } else {
      next();
    }
  } else {
   router.push('/login')
  }
});

vue组件内headers携带token方法 (一)

var that=this;
            //获取课程列表
            this.axios({
                method:'get',
                url:'http://localhost:3000/api/v1/courses',
                headers:{
                    authorization:'Bearer '+window.localStorage.getItem('token')
                }
            }).then(result=>{
               
                if(result.data.length>0){
                    that.courses=result.data;
                }
            })

vue组件内headers携带token方法 (二)设置axios拦截器

每次向后端请求携带 头信息
在 src/main.js 当中加上以下代码:


// http request 拦截器可选
axios.interceptors.request.use(
  config => {
    if (localStorage.token) {  // 判断是否存在token,如果存在的话,则每个http header都加上token
      config.headers.Authorization = `Bearer ${localStorage.token}`;
    }
    return config;
  },
  err => {
    return Promise.reject(err);
  });

axios.interceptors.response.use(
  response => {
    return response;
  },
  error => {
    if (error.response.status === 401) {
     //输出授权失败错误信息
    } else {
     //输出其他错误信息
    }
    return Promise.reject(error);
  }
);
  • 7
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
好的,我可以为您提供一些指导和提示,但是我需要更多的信息来确保我的回答符合您的需求。 首先,您需要了解这些技术的基本概念和用法。以下是一些关键点: - Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行时,可用于构建高性能的网络应用程序。 - Express 是 Node.js 最流行的 web 框架之一,它提供了一组强大的功能和工具,使得构建 web 应用程序变得更加容易。 - JWT(JSON Web Token)是一种基于 JSON 的开放标准,用于在网络应用程序之间安全地传输信息。JWT 包含加密的信息,可以被验证和信任。 - Angular 是一个流行的前端框架,用于构建单页应用程序。它使用 TypeScript 编写,并提供了一组强大的工具和组件来简化开发。 - MySQL 是一种流行的关系型数据库,常用于存储应用程序的数据。 现在,让我们来看看如何将这些技术组合在一起构建一个应用程序。 首先,您需要创建一个 Node.js 项目,并使用 Express 框架创建一个基本的 web 服务器。您可以使用以下命令创建一个新项目: ``` mkdir myapp cd myapp npm init ``` 然后,您可以使用以下命令安装 Express: ``` npm install express ``` 接下来,您需要创建一个 Express 应用程序,并配置路由和间件。您可以使用以下代码创建一个基本的 Express 应用程序: ```javascript const express = require('express') const app = express() app.use(express.json()) app.get('/', (req, res) => { res.send('Hello, world!') }) app.listen(3000, () => { console.log('Server started on port 3000') }) ``` 这个应用程序使用 `express.json()` 间件来解析请求体的 JSON 数据,并定义了一个基本的路由,该路由将在根路径上返回一个简单的“Hello, world!”消息。 接下来,您需要配置身份验证和授权。您可以使用 JWT 来实现身份验证和授权。您可以使用以下代码生成和验证 JWT: ```javascript const jwt = require('jsonwebtoken') const secret = 'mysecret' function generateToken(user) { const payload = { id: user.id, name: user.name } const options = { expiresIn: '1h' } return jwt.sign(payload, secret, options) } function verifyToken(token) { return jwt.verify(token, secret) } ``` 这个代码定义了两个函数,一个用于生成 JWT,另一个用于验证 JWT。 接下来,您需要创建一个 MySQL 数据库,并使用 Node.js 的 mysql 模块连接到它。您可以使用以下代码连接到 MySQL 数据库: ```javascript const mysql = require('mysql') const connection = mysql.createConnection({ host: 'localhost', user: 'username', password: 'password', database: 'myapp' }) connection.connect((err) => { if (err) { console.error('Error connecting to database', err) } else { console.log('Connected to database') } }) ``` 这个代码使用 `mysql.createConnection()` 函数创建一个 MySQL 连接,并使用 `connection.connect()` 函数连接到数据库。 最后,您需要创建一个 Angular 应用程序,并使用它来调用您的 Express API。您可以使用以下代码创建一个基本的 Angular 应用程序: ``` ng new myapp cd myapp ng serve ``` 这个应用程序使用 Angular CLI 创建一个基本的 Angular 应用程序,并使用 `ng serve` 命令启动开发服务器。 接下来,您需要添加一个服务来调用您的 Express API。您可以使用以下代码创建一个基本的 Angular 服务: ```typescript import { Injectable } from '@angular/core'; import { HttpClient } from '@angular/common/http'; @Injectable({ providedIn: 'root' }) export class ApiService { private baseUrl = 'http://localhost:3000'; constructor(private http: HttpClient) { } public getHello() { return this.http.get(`${this.baseUrl}/hello`); } public login(credentials) { return this.http.post(`${this.baseUrl}/login`, credentials); } } ``` 这个代码定义了一个名为 `ApiService` 的 Angular 服务,它使用 `HttpClient` 模块来调用 Express API 的端点。 现在,您可以在 Angular 组件使用这个服务来调用 Express API。例如,以下代码演示了如何在 Angular 组件调用 `ApiService.getHello()`: ```typescript import { Component } from '@angular/core'; import { ApiService } from './api.service'; @Component({ selector: 'app-root', template: ` <h1>{{ message }}</h1> ` }) export class AppComponent { public message: string; constructor(private apiService: ApiService) { } ngOnInit() { this.apiService.getHello().subscribe((response: any) => { this.message = response.message; }); } } ``` 这个代码定义了一个名为 `AppComponent` 的 Angular 组件,它使用 `ApiService` 来调用 Express API 的 `/hello` 端点,并将响应的消息显示在页面上。 这只是一个简单的示例,您可以根据自己的需求进行更改和扩展。希望这可以帮助您开始构建您的应用程序!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jacky张

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值