vue+express中token使用

1、express服务器上安装jsonwebtoken

cnpm i -S jsonwebtoken

根目录下新建token_vertify.js 

var jwt = require('jsonwebtoken')
var signkey = 'mes_qdhd_mobile' //密钥

//设置token
exports.setToken = function (username) {
    return new Promise((resolve, reject) => {
        var token = jwt.sign({
            username: username
        }, signkey, {
            expiresIn: 60 * 60 * 24 * 3 //表示3天后token过期
        });
        resolve(token)
    })
}

//验证token
exports.verToken = function (token) {
    return new Promise((resolve, reject) => {
        jwt.verify(token, signkey, (error, decoded) => {
            if (error) {
                reject(error)
            } else {
                resolve(decoded)
            }
        })
    })
}

user.js

store/index.js

import Vue from 'vue'
import Vuex from 'vuex'

Vue.use(Vuex)

export default new Vuex.Store({
  state: {
    token: localStorage.getItem("token") ? localStorage.getItem("token") : "",
    moreUserInfo: JSON.parse(localStorage.getItem('moreUserInfo')),
  },
  mutations: {
    setToken(state, {
      token
    }) {
      localStorage.setItem("token", token)
      state.token = localStorage.getItem("token")
    },
    delToken(state) {
      state.token = '',
        localStorage.removeItem('token')
    },
    setMoreUserInfo(state, {
      moreUserInfo
    }) {
      localStorage.setItem('moreUserInfo', JSON.stringify(moreUserInfo))
      state.moreUserInfo = JSON.parse(localStorage.getItem('moreUserInfo'))
    }
  },
  actions: {},
  modules: {}
})

login.vue

axios.js

router/index.js

let vm = new Vue();
router.beforeEach((to, from, next) => {
  if (to.meta.requireAuth) {
    if (store.state.token) {
      next();
    } else {
      next({
        name: "login",
        params: {
          redirect: to.fullPath
        }//这个params很关键。它保证了登录成功后会跳转到指定的页面,而不是直接去首页
      })
      vm.$message({
        message: "您还未登录",
        showClose: true,
        type: "warning"
      });
    }
  } else {
    next();
  }
})

 

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue.js 是一个流行的 JavaScript 应用程序框架,用于构建单页面应用程序(SPA)。Axios 是一个基于 Promise 的 HTTP 库,用于在 Web 应用程序发送异步请求。 在 Vue 应用程序,可以使用 Axios 发送 HTTP 请求来与后端服务器进行通信。以下是一个简单的示例,展示了如何使用 Axios 来发送登录请求并处理响应: ``` // 在 Vue 组件引入 Axios import axios from 'axios'; // 定义一个名为 Login 的 Vue 组件 export default { data() { return { email: '', password: '' } }, methods: { login() { // 使用 Axios 发送 POST 请求 axios.post('/api/login', { email: this.email, password: this.password }) .then(response => { // 处理成功响应 console.log(response.data); }) .catch(error => { // 处理错误响应 console.log(error.response.data); }); } } } ``` 在后端服务器,你可以使用一些框架来处理登录和注册请求。以下是一个使用 Node.js 和 Express 框架的示例: ``` // 引入 Express 框架和相关间件 const express = require('express'); const bodyParser = require('body-parser'); const cors = require('cors'); // 初始化 Express 应用程序 const app = express(); // 解析请求体的 JSON 数据 app.use(bodyParser.json()); // 允许跨域请求 app.use(cors()); // 处理登录请求 app.post('/api/login', (req, res) => { const email = req.body.email; const password = req.body.password; // 在数据库查找用户信息 // ... // 验证用户信息 if (email === 'example@example.com' && password === 'password') { // 登录成功,返回用户信息和一个 JWT 令牌 const user = { id: 1, email: 'example@example.com' }; const token = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c'; res.json({ user, token }); } else { // 登录失败,返回错误信息 res.status(401).json({ error: 'Invalid email or password.' }); } }); // 处理注册请求 app.post('/api/register', (req, res) => { const email = req.body.email; const password = req.body.password; // 在数据库创建用户信息 // ... // 返回成功响应 res.json({ message: 'Registration successful.' }); }); // 启动服务器,监听端口 const port = process.env.PORT || 3000; app.listen(port, () => { console.log(`Server started on port ${port}.`); }); ``` 注意,这只是一个简单的示例。在实际应用程序,你需要处理更多的情况和错误,例如用户输入错误的凭据、数据库连接错误等。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值