nodejs JWT jsonwebtoken学習ノート
記事の目次文章は を参照してください. jsonwebtokenはtokenと検査token を生成する.
文章の参考 jsonwebtoken npm jsonwebtoken紹介 jsonwebtokenはtokenと検査tokenを生成します. controllerは、ユーザの要求を受信する . jwt Tools.jsはtokenを作成し、tokenに基づいてユーザ情報 を取得する. JWTは統一的にブロッキングし、ルートを定義し、非登録インターフェースでは、tokenが に持ってきたかどうかを検証する必要がある. クロスドメインの問題については、nodejs expressを参照して、クロスドメイン設定 を許可する.クライアントは、要求ヘッドにAuthorzation検証タイプを加えることがビーバー である.
文章の参考
var express = require('express')
var connection = require('../common/mysqlConn')
var userService = require('../service/userService')
var jwtTools = require('../common/jwtTools')
// token
const tokenCache = {
}
var router = express.Router()
//
router.post('/login', function (req, res, next) {
const pageObj = req.body
var currentPage = parseInt(pageObj.currentPage) - 1
let paramObj = {
username: pageObj.username,
pwd: pageObj.pwd,
}
userService.loginUser(paramObj, function (err, results, fields) {
if (results.length > 0) {
let token = jwtTools.createTokenByLoginInfo(results[0])
tokenCache[token] = token
res.json({
state: 1, // 1 , 0
user: results[0],
token,
})
} else {
res.json({
state: 0, // 1 , 0
message: ' ',
})
}
})
})
// token
router.post('/currenuser', function (req, res, next) {
const headerObj = req.headers
const tokenStr = headerObj.token
if (!tokenStr) {
res.json({
state: 0, // 1 , 0
message: ' token',
})
} else {
if (tokenCache[tokenStr]) {
jwtTools.verifyToken(tokenStr).then((tokenResult) => {
if (tokenResult.status) {
res.json({
state: 1, // 1 , 0
user: tokenResult.code,
})
} else {
res.json({
state: 0, // 1 , 0
message: 'token ',
})
}
})
} else {
res.json({
state: 1, // 1 , 0
message: ' token',
})
}
}
})
const jwt = require('jsonwebtoken') // jwt
const tokenConfig = {
jwtsecret: '1qaz2wsx',
}
// JSON token
const createTokenByLoginInfo = function (userInfo) {
let tempUser = userInfo
console.log(JSON.parse(JSON.stringify(tempUser)))
let token = jwt.sign(JSON.parse(JSON.stringify(tempUser)), tokenConfig.jwtsecret, {
expiresIn: 60 * 60 * 24, // 24
})
return token
}
// token JSON
const verifyToken = function (token) {
return new Promise((resolve, reject) => {
jwt.verify(token, tokenConfig.jwtsecret, function (err, decoded) {
if (err) {
resolve({
status: false,
message: ' token.',
})
} else {
resolve({
status: true,
message: ' token.',
code: decoded,
})
}
})
})
}
// token
const authenticateJWT = (req, res, next) => {
const authHeader = req.headers.authorization
if (!authHeader) {
res.sendStatus(401)
return
}
const token = authHeader.split(' ')[1]
jwt.verify(token, process.env.ACCESS_TOKEN_SECRET, (err, user) => {
if (err) {
res.sendStatus(403)
return
}
req.user = user
next()
})
}
module.exports = {
authenticateJWT,
createTokenByLoginInfo,
verifyToken,
}
const app = express();
const jwtTools = require('./util/jwtTools')
const server = http.createServer(app)
// /
app.all('*', function(req, res, next) {
console.log(req.headers.origin)
console.log(req.environ)
res.header("Access-Control-Allow-Origin", req.headers.origin);
// res.header("Access-Control-Allow-Origin", '*');
res.header("Access-Control-Allow-Headers", "Content-Type,Content-Length, Authorization, Accept,X-Requested-With");
res.header("Access-Control-Allow-Methods","PUT,POST,GET,DELETE,OPTIONS");
res.header("Access-Control-Allow-Credentials","true");
res.header("X-Powered-By",' 3.2.1')
if(req.method === "OPTIONS") res.send(200);/* options */
else next();
});
// token /
app.all('*', function(req, res, next) {
// , token
if (req.path !== '/api/users/login' && req.path !== '/api/users') {
jwtTools.authenticateJWT(req, res, next)
} else {
next()
}
});
, token
、もし反転したら、最初のoption要求がブロックされ、永遠に成功しません.{
header: {
Authorization: 'Bearer jwtTokenStr'
}
}
注意Bearer jwtTokenStr