2017-06-01 54 views
0

我正在閱讀Express JWT Permissions的文檔,但不明白如何將當前用戶的權限保存在令牌中。我只看到如何檢查已經設置的權限。快遞JWT權限:如何設置權限?

任何人都可以發佈設置權限的示例嗎?例如假設我們對用戶進行了身份驗證,並且想給他一個管理員權限。

回答

0

這不是那個lib的問題。設置令牌值不是任何jwt權限庫的一部分,它們假定在執行中間件時已經設置了正確的值。

這是我的公共node seed project提取,看看如何在一個令牌

import * as jwt from 'jsonwebtoken'; 
const router = Router(); 
router.get('/api/v1/token', (req: Request, res: Response, next: NextFunction) => { 
    const token = jwt.sign({ someData: 'foobar' }, config.getJwtSecret()); 
    res.json({ token: token }); 
}); 

代碼設置值的例子。

0

您應該添加「權限」屬性,智威湯遜有效載荷的所有權限用戶的陣列有:

import * as jwt from 'jsonwebtoken'; 

public static authenticate(req: Request, res: Response, next: NextFunction) { 
    const payload = { 
    name: 'John', 
    surname: 'Smith', 
    username: 'john.smith', 
    permissions: ['USER', 'ADMIN'], 
    }; 
    const options = { 
    expiresIn: Number(process.env.JWT_TTL), 
    }; 
    const token = jwt.sign(payload, process.env.JWT_SECRET, options); 
    res.status(201).send({ token }); 
} 

以後,當用戶發送的請求與授權令牌,你應該使用快遞,智威湯遜 - 允許lib中檢查用戶是否擁有正確的權限:

const guard = require("express-jwt-permissions")(); 

// all user routes 
this.routes.use('/api', guard.check('USER')); 
// ... 

// all admin routes 
this.routes.use('/api/admin/', guard.check('ADMIN')); 
// ...