最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

vue+express生成token方式

 更新時(shí)間:2024年08月28日 09:20:28   作者:江一銘  
這篇文章主要介紹了vue+express生成token方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

vue+express生成token

在使用vue+node開發(fā)的過程中,在寫登錄時(shí)候我們會(huì)使用到token驗(yàn)證,下面我來分享一下express生成token和簡(jiǎn)單的使用

安裝

npm install express-jwt
npm install jsonwebtoken --save
  • express-jwt內(nèi)部引用了jsonwebtoken,對(duì)其封裝使用。在實(shí)際的項(xiàng)目中這兩個(gè)都需要引用,他們兩個(gè)的定位不一樣。
  • jsonwebtoken是用來生成token給客戶端的,express-jwt是用來驗(yàn)證token的。

新建token.js文件

//用于生成和解析token
var jwt = require('jsonwebtoken');
var signkey = 'zxcvbnmpoiuy';//自定義秘鑰

exports.setToken = function (phone, pasaWord) {
    return new Promise((resolve, reject) => {
        const rule = {
            phone: phone,
            pasaWord: pasaWord
        }
        // rule 賬號(hào)密碼 expiresIn 失效時(shí)間
        const token = jwt.sign(rule, signkey, { expiresIn: '1h' });
        resolve(token);
    })
}

exports.verToken = function (token) {
    return new Promise((resolve, reject) => {
        var info = jwt.verify(token.split(' ')[1], signkey);
        resolve(info);
    })
}

app.js中配置

var vertoken = require('./utils/token');
var expressJWT = require('express-jwt');

// 解析token獲取用戶信息
app.use(function (req, res, next) {
// authorization 必須為這個(gè)  和前端保持一致
  var token = req.headers['authorization'];

  if (token == undefined) {
    return next();
  } else {
    vertoken.verToken(token).then((data) => {
      req.data = data;
      return next();
    }).catch((error) => {
      return next();
    })
  }
});


//驗(yàn)證token
app.use(expressJWT({
  secret: 'zxcvbnmpoiuy', // signkey 自定義秘鑰 需跟上方保持一致
  algorithms: ["HS256"]
}).unless({
  path: ['/users/addUsers', "/users/login"]//除了這些地址,其他的URL都需要驗(yàn)證
}));


// 錯(cuò)誤處理
app.use(function (err, req, res, next) {
  // set locals, only providing error in development
  res.locals.message = err.message
  res.locals.error = req.app.get('env') === 'development' ? err : {}
  // render the error page
  res.status(err.status || 500)

  if (err.status == 401) {
    res.send(httpRequest.untoken())
  } else if (err.status == 404) {
    res.send(httpRequest.notFound())
  } else {
    res.send({ code: err.status, data: {}, msg: err.status })
  }
})

在接口中使用

// token 驗(yàn)證
var jwt = require('jsonwebtoken');
var Ctoken = require('../utils/token');

router.post('/login', async function (req, res, next) {
  let bady = {
    phone: req.body.phone,
    passWord: req.body.passWord,
  }
  //登錄前查詢數(shù)據(jù)庫有無此賬號(hào)
  const data = await User.find().where({
    phone: req.body.phone
  })
  if (data.length == 0) {
    res.send({
      code: 500,
      success: false,
      msg: "該用戶沒有注冊(cè)。請(qǐng)先前往注冊(cè)"
    })
    return
  }
  // 驗(yàn)證密碼
  if (data.length != 0 && data[0].passWord !== req.body.passWord) {
    res.send({
      code: 500,
      success: false,
      msg: "密碼錯(cuò)誤,請(qǐng)重新驗(yàn)證"
    })
    return
  }

  Ctoken.setToken(bady).then((data) => {
    let CObj = {
      code: 200,
      msg: "登錄成功",
      token: data
    }
    res.json(CObj);
  });
})

錯(cuò)誤

expressjwt is not a function

版本太高。

只需要將pakage.json中的express-jwt版本改為6.1.1,重新npm i 即可使用。

express-jwt新特性請(qǐng)自行前往npm官網(wǎng)查看。

algorithms should be set

在app.use(expressJWT) 這個(gè)配置中添加 algorithms: [“HS256”];

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 詳解在vue-cli中使用graphql即vue-apollo的用法

    詳解在vue-cli中使用graphql即vue-apollo的用法

    這篇文章主要介紹了詳解在vue-cli中使用graphql即vue-apollo的用法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-09-09
  • vue3使用別名報(bào)錯(cuò)問題的解決辦法(vetur插件報(bào)錯(cuò)問題)

    vue3使用別名報(bào)錯(cuò)問題的解決辦法(vetur插件報(bào)錯(cuò)問題)

    最近在寫一個(gè)購物網(wǎng)站使用vue,使用中遇到了問題,下面這篇文章主要給大家介紹了關(guān)于vue3使用別名報(bào)錯(cuò)問題的解決辦法,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-07-07
  • element-ui下拉菜單組件Dropdown的示例代碼

    element-ui下拉菜單組件Dropdown的示例代碼

    這篇文章主要介紹了element-ui下拉菜單組件Dropdown,本文詳細(xì)給大家介紹了我遇到的一個(gè)最大的坑,通過結(jié)合示例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2022-08-08
  • vue使用keep-alive無效以及include和exclude用法解讀

    vue使用keep-alive無效以及include和exclude用法解讀

    這篇文章主要介紹了vue使用keep-alive無效以及include和exclude用法解讀,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • Vue3.0路由跳轉(zhuǎn)攜帶參數(shù)的示例詳解

    Vue3.0路由跳轉(zhuǎn)攜帶參數(shù)的示例詳解

    這篇文章主要介紹了Vue3.0路由跳轉(zhuǎn)攜帶參數(shù)的示例代碼,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-04-04
  • Vue.js實(shí)現(xiàn)時(shí)間軸功能

    Vue.js實(shí)現(xiàn)時(shí)間軸功能

    這篇文章主要為大家詳細(xì)介紹了Vue.js實(shí)現(xiàn)時(shí)間軸功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • Vue項(xiàng)目如何開啟gzip

    Vue項(xiàng)目如何開啟gzip

    這篇文章主要介紹了Vue項(xiàng)目如何開啟gzip的實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2025-06-06
  • Vue實(shí)現(xiàn)全局菜單搜索框的示例

    Vue實(shí)現(xiàn)全局菜單搜索框的示例

    本文主要介紹了Vue實(shí)現(xiàn)全局菜單搜索框的示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-02-02
  • Vue2.x 的雙向綁定原理及實(shí)現(xiàn)

    Vue2.x 的雙向綁定原理及實(shí)現(xiàn)

    這篇文章主要介紹了Vue2.x 的雙向綁定原理,Vue 是利用的 Object.defineProperty() 方法進(jìn)行的數(shù)據(jù)劫持,利用 set、get 來檢測(cè)數(shù)據(jù)的讀寫。需要的朋友可以參考下面文章的具體內(nèi)容
    2021-09-09
  • 使用vuex的時(shí)候,出現(xiàn)this.$store為undefined問題

    使用vuex的時(shí)候,出現(xiàn)this.$store為undefined問題

    這篇文章主要介紹了使用vuex的時(shí)候,出現(xiàn)this.$store為undefined問題及解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-06-06

最新評(píng)論

乐昌市| 曲麻莱县| 鸡西市| 南召县| 尖扎县| 长沙县| 锡林浩特市| 文山县| 黑龙江省| 大荔县| 固阳县| 团风县| 八宿县| 滁州市| 彰武县| 安国市| 延吉市| 孝感市| 蛟河市| 紫云| 昭觉县| 蓝山县| 滁州市| 昔阳县| 大埔区| 道孚县| 苏州市| 沐川县| 融水| 伊金霍洛旗| 兴业县| 宁城县| 南昌县| 浦北县| 小金县| 白沙| 临漳县| 梁山县| 施甸县| 区。| 凤山市|