vue+node(express)做中間層開發(fā)五--token驗證

基于token的鑒權(quán)機(jī)制 — JWT介紹 簡單說是用戶調(diào)登陸接口后服務(wù)端返回一個token费就,前端拿到token放在header里例驹,每次請求的時候傳輸給服務(wù)端,服務(wù)端根據(jù)token驗證,如果有效就繼續(xù),如果無效就立即返回。

  • 用jsonwebtoken生成token
  • 用express-jwt驗證token是否失效
  • 用jsonwebtoken解析出token中的用戶信息蒋搜,比如id

安裝依賴
npm install jsonwebtoken --save
npm install express-jwt

新增server/node_api/src/libs/token.js文件

import jwt from 'jsonwebtoken'
import config from '../config'
const jwtSecret = process.env.NODE_ENV === 'production' ? config.tokenKey.prod : config.tokenKey.dev

export const generateToken = (userName, userId) => {
  return new Promise((resolve, reject) => {
    const token = jwt.sign({userName,userId}, jwtSecret, {expiresIn: '24h'});
    resolve(token)
  })
}

export const getToken = (token) => {
  return new Promise((resolve, reject) => {
    if(!token) {
      reject({error: 'token是空的'})
    }else {
      console.log('token=',token)
      const info = jwt.verify(token.split(' ')[1], jwtSecret)
      console.log('info=',info)
      resolve(info) //解析返回的值
    }
  })
}

jwt.sign()傳入需要解析的值,一般為userName判莉,userId豆挽,expiresIn設(shè)置token的過期時間。
打印內(nèi)容如下:

token= bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyTmFtZSI6ImFkbWluIiwidXNlcklkIjoxLCJpYXQiOjE2MDk3NDExNDEsImV4cCI6MTYwOTgyNzU0MX0.JsioftQnZxM5xkfTkAiUjmzW29XGbkx2_H69-xe-iYs
info= { userName: 'admin', userId: 1, iat: 1609741141, exp: 1609827541 }

在app.js中增加一個中間件驗證token是否過期骂租。

app.use((req, res, next) => {
  const token = req.headers['authorization']
  if(token == undefined) {
    next()
  }else {
    getToken(token).then((data) => {
      res.data= data;
      next()
    }).catch((error) => {
      next()
    })
  }
})
app.use(expressJwt({
  secret:'Baohong123456',
  algorithms: ['HS256']
}).unless({
  path: ['/users/login']
}))
app.use('/', indexRouter)
app.use('/users', usersRouter)
...
// 錯誤處理中間件
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.status(401).send('token失效')
  }
  res.render('error')
})

編輯server/node_api/src/routes/users.js祷杈,當(dāng)用戶登錄成功后生成token返回給用戶。因為node沒有直接查詢數(shù)據(jù)庫渗饮,而是調(diào)用java提供的登錄接口但汞,如果正常返回就判斷是登陸成功了

router.post('/login', (req, res, next) => {
  login({ user_name: 'admin', user_pwd: '666' }).then(result => {
    const { result: { data: { data: { user, token } } } } = { result }
    generateToken(user.userName,user.id).then(nodeToken => {
      res.send({
        token,
        user,
        nodeToken
      })
    })
  })
})

前端在成功調(diào)用登陸接口后拿到返回的token,可以存在localStorage里互站,每次發(fā)送請求的時候吧token放在請求頭即可私蕾。src/libs/axios.js

const token = localStorage.getItem('token')
if(token){
  config.headers.authorization = 'Bearer '+token
}

參考node.js之express的token驗證

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市胡桃,隨后出現(xiàn)的幾起案子踩叭,更是在濱河造成了極大的恐慌,老刑警劉巖翠胰,帶你破解...
    沈念sama閱讀 219,110評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件容贝,死亡現(xiàn)場離奇詭異,居然都是意外死亡之景,警方通過查閱死者的電腦和手機(jī)斤富,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,443評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來锻狗,“玉大人满力,你說我怎么就攤上這事焕参。” “怎么了油额?”我有些...
    開封第一講書人閱讀 165,474評論 0 356
  • 文/不壞的土叔 我叫張陵叠纷,是天一觀的道長。 經(jīng)常有香客問我潦嘶,道長涩嚣,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,881評論 1 295
  • 正文 為了忘掉前任衬以,我火速辦了婚禮缓艳,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘看峻。我一直安慰自己,他們只是感情好衙吩,可當(dāng)我...
    茶點故事閱讀 67,902評論 6 392
  • 文/花漫 我一把揭開白布互妓。 她就那樣靜靜地躺著,像睡著了一般坤塞。 火紅的嫁衣襯著肌膚如雪冯勉。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,698評論 1 305
  • 那天摹芙,我揣著相機(jī)與錄音灼狰,去河邊找鬼。 笑死浮禾,一個胖子當(dāng)著我的面吹牛交胚,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播盈电,決...
    沈念sama閱讀 40,418評論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼蝴簇,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了匆帚?” 一聲冷哼從身側(cè)響起熬词,我...
    開封第一講書人閱讀 39,332評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎吸重,沒想到半個月后互拾,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,796評論 1 316
  • 正文 獨居荒郊野嶺守林人離奇死亡嚎幸,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,968評論 3 337
  • 正文 我和宋清朗相戀三年颜矿,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片鞭铆。...
    茶點故事閱讀 40,110評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡或衡,死狀恐怖焦影,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情封断,我是刑警寧澤斯辰,帶...
    沈念sama閱讀 35,792評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站坡疼,受9級特大地震影響彬呻,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜柄瑰,卻給世界環(huán)境...
    茶點故事閱讀 41,455評論 3 331
  • 文/蒙蒙 一闸氮、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧教沾,春花似錦蒲跨、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,003評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至堪唐,卻和暖如春巡语,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背淮菠。 一陣腳步聲響...
    開封第一講書人閱讀 33,130評論 1 272
  • 我被黑心中介騙來泰國打工男公, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人合陵。 一個月前我還...
    沈念sama閱讀 48,348評論 3 373
  • 正文 我出身青樓枢赔,卻偏偏與公主長得像,于是被迫代替她去往敵國和親曙寡。 傳聞我的和親對象是個殘疾皇子糠爬,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,047評論 2 355

推薦閱讀更多精彩內(nèi)容