成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

4.4 權(quán)限攔截控制AccessToken jwt-博客后端Api-NodeJs+Express+

CoXie / 1849人閱讀

摘要:權(quán)限控制業(yè)務(wù)需求查看用戶列表接口管理員才能使用更新用戶信息接口當(dāng)前對(duì)應(yīng)用戶才能調(diào)用這時(shí)候需要需要加入中間件來實(shí)現(xiàn)權(quán)限控制這時(shí)候咱們需要學(xué)習(xí)了解下課前學(xué)習(xí)了解入門教程基于的認(rèn)證版實(shí)現(xiàn)本文中使用了插件現(xiàn)將服務(wù)邏輯代碼附上服務(wù)配置設(shè)置創(chuàng)

權(quán)限控制
業(yè)務(wù)需求:查看用戶列表接口(管理員才能使用)、更新用戶信息接口(當(dāng)前對(duì)應(yīng)用戶才能調(diào)用)

這時(shí)候需要需要加入中間件來實(shí)現(xiàn)權(quán)限控制:

這時(shí)候咱們需要學(xué)習(xí)了解下 :AccessToken jwt

AccessToken jwt
課前學(xué)習(xí)了解
JSON Web Token 入門教程
http://www.ruanyifeng.com/blo...
基于jsonwebtoken(JWT) 的web認(rèn)證 (Node版實(shí)現(xiàn))
https://segmentfault.com/a/11...
node-jsonwebtoken
https://github.com/auth0/node...

本文中使用了[email protected]插件

現(xiàn)將token服務(wù)邏輯代碼附上

/**
 * token服務(wù)
 * add by boomer 2019-05-03 21:57:11
 */
var Promise = require("bluebird");
var config = require("config-lite"); //配置
var jwt = require("jsonwebtoken"); //json token

module.exports = {
    /**
     * 設(shè)置token 創(chuàng)建token
     */
    setToken: function(payload) {
        // var expiresIn = Math.floor(Date.now() / 1000) + (1 * 60); // var expiresIn = "24h";
        var expiresIn = Date.now() + 3600000 * 24;//24小時(shí)后
        var token = jwt.sign(payload, config.token.secretOrPrivateKey, {
            expiresIn: expiresIn, // 設(shè)置過期時(shí)間
        });
        return {
            token: token,
            expiresIn: expiresIn,
        };
    },
    /**
     * 驗(yàn)證token是否正確:傳入當(dāng)前token和當(dāng)前用戶uuid
     */
    verifyToken: function(token, userUuid){
        return new Promise(function(resolve, reject) {
            jwt.verify(token, config.token.secretOrPrivateKey, function(err, tokenData) {
                if (tokenData && tokenData.uuid == userUuid) {
                    resolve("ok");
                }else{
                    reject("fail");
                }
            });
        });
    },
    /**
     * 路由驗(yàn)證token
     */
    verifyRouterToken: function(req, res, next, isAdmin) {
        //accesstoken 被自動(dòng)轉(zhuǎn)小寫了
        var token = req.headers.accesstoken;
        if (!token) { // 如果沒有token,則返回錯(cuò)誤
            res.json({
                code: "401",
            });
            return;
        } else { //驗(yàn)證token
            jwt.verify(token, config.token.secretOrPrivateKey, function(err, tokenData) { //只有在token正確時(shí)tokenData有值
                if (err) {
                    res.json({
                        code: "402",
                    });
                    return;
                } else {
                    //驗(yàn)證是否為管理員
                    if (isAdmin && !tokenData.isAdmin) {
                        res.json({
                            code: "403",
                        });
                        return;
                    } else if (!isAdmin && tokenData.uuid && !tokenData.isAdmin) {
                        //驗(yàn)證userUuid 避免普通用戶登錄修改其他人資料
                        var userUuid = (req.body || req.query || req.params)["userUuid"];
                        if (userUuid && userUuid != tokenData.uuid) {
                            res.json({
                                code: "403",
                            });
                            return;
                        } else {
                            next();
                        }
                    } else {
                        next();
                    }
                }
            });
        }
    },
    /**
     * 清除token
     */
    delToken: function(token) {
        if (!token) {
            return "delTokenFail";
        } else {
            jwt.decode(token);
            return "delTokenSuccess";
        }
    },
};

accessToken一般在登錄/注冊(cè)成功時(shí)獲取 然后緩存到本地,每次前端請(qǐng)求時(shí)將有效的accessToken放到headers中(這塊后面寫前端時(shí)補(bǔ)充 更新token心跳機(jī)制等),然后請(qǐng)求到后端,后端再通過校驗(yàn)token中間件做權(quán)限攔截,校驗(yàn)通過后才能執(zhí)行后面的業(yè)務(wù)邏輯
現(xiàn)在說下,后端通過上面tokenService.setToken方法 生成AccessToken的代碼:

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/104076.html

相關(guān)文章

  • NodeJs+Express+Mysql + Vuejs 項(xiàng)目實(shí)戰(zhàn) - 大綱

    摘要:多一個(gè)技能多一條出路,祝你在自學(xué)道路上越走越好,掌握自己的核心技能,不只是優(yōu)秀,還要成為不可替代的人 NodeJs+Express+Mysql + Vuejs 項(xiàng)目實(shí)戰(zhàn) 最近準(zhǔn)備寫一系列文章,全面講述如何基于NodeJs + Express + Mysql + Vuejs 從零開發(fā)前后端完全分離項(xiàng)目; 文筆及技術(shù)可能在某些方面欠佳,請(qǐng)您指正,共同學(xué)習(xí)進(jìn)步 前端:Vuejs全家桶 后端:...

    noONE 評(píng)論0 收藏0
  • 4.1 開發(fā)環(huán)境目錄結(jié)構(gòu)配置文件功能梳理-博客后端Api-NodeJs+Express+Mys

    摘要:從本章開始,正式學(xué)習(xí)如何使用搭建一個(gè)博客。但通常我們都會(huì)有許多環(huán)境,如本地開發(fā)環(huán)境測(cè)試環(huán)境和線上環(huán)境等,不同的環(huán)境的配置不同,我們不可能每次部署時(shí)都要去修改引用或者。會(huì)根據(jù)環(huán)境變量的不同從當(dāng)前執(zhí)行進(jìn)程目錄下的目錄加載不同的配置文件。 從本章開始,正式學(xué)習(xí)如何使用 Nodejs + Express + Mysql 搭建一個(gè)博客。 開發(fā)環(huán)境 首先說下開發(fā)環(huán)境安裝的核心依賴版本: Node....

    DevWiki 評(píng)論0 收藏0
  • 4.3 路由設(shè)計(jì)/RESTful API-博客后端Api-NodeJs+Express+Mysql實(shí)

    摘要:路由設(shè)計(jì)路由設(shè)計(jì)以用戶注冊(cè)為例介紹如何閉環(huán)用戶注冊(cè)開發(fā)注意點(diǎn)使用郵箱注冊(cè)驗(yàn)證郵箱是否注冊(cè)目前真實(shí)開發(fā)業(yè)務(wù)大部分都是手機(jī)號(hào)注冊(cè),這塊由于沒有購(gòu)買短信服務(wù)首先,在文件夾下新建上圖中對(duì)應(yīng)真實(shí)業(yè)務(wù)邏輯現(xiàn)附上業(yè)務(wù)實(shí)現(xiàn)代碼加密國(guó)際化工具類用戶服務(wù) 路由設(shè)計(jì) 路由設(shè)計(jì) 以用戶注冊(cè)為例介紹如何閉環(huán)用戶注冊(cè)開發(fā)注意點(diǎn):(1)使用郵箱注冊(cè)(2)驗(yàn)證郵箱是否注冊(cè) 【目前真實(shí)開發(fā)業(yè)務(wù)大部分都是手機(jī)號(hào)注冊(cè),這塊...

    1fe1se 評(píng)論0 收藏0
  • 4.9 跨域cors-博客后端Api-NodeJs+Express+Mysql實(shí)戰(zhàn)

    摘要:跨域跨域請(qǐng)求也可以使用代表允許所有此時(shí)咱們啟動(dòng)服務(wù),在接口調(diào)用時(shí)就會(huì)有跨域白名單攔截校驗(yàn) 跨域corshttps://github.com/expressjs/... var config = { cors: { //跨域請(qǐng)求 origin: [http://localhost:5000, http://localhost:5001],//也可以使用*代表允許...

    weij 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

CoXie

|高級(jí)講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<