2016-09-07 2 views
0

jwt 권한이있는 nodejs에 응용 프로그램이 있습니다. posman에서 get을 보내면 인증 헤더가 있지만 브라우저에서 보낼 때 인증 헤더가 누락됩니다. 는 여기가 verifyToken 방법의 인증 헤더를 얻으려고, 노드 코드,하지만이되지 않습니다 :브라우저에서 http 요청을 보낼 때 인증 헤더 누락

'use strict'; 

var SwaggerExpress = require('swagger-express-mw'); 
var app = require('express')(); 
module.exports = app; // for testing 
var _ = require('lodash'); 
var jwt = require('jsonwebtoken'); // used to create, sign, and verify tokens 

var config = { 
    appRoot: __dirname // required config 
}; 

app.set('superSecret', config.secret); // secret variable 
// bootstrap database connection and save it in express context 
app.set("models", require("./api/model")); 
var a = app.get("models").Role; 

var repositoryFactory = require("./api/repository/RepositoryFactory").init(app); 

var verifyToken = function (req, res, next) { 
    // verify token and read user from DB 
    // var token = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MSwiTm9tYnJlVXN1YXJpbyI6ImQiLCJQYXNzd29yZCI6IiQyYSQxMCRYS3BJM2ZDRVFoSzVKUFBQWEdIVVZPbUVPQTZsRVRoZDRtWHl4a0tDeGtUcEhvY0U0UTNILiIsImNyZWF0ZWRBdCI6IjIwMTYtMDktMDVUMTg6Mjk6MTYuMDAwWiIsInVwZGF0ZWRBdCI6IjIwMTYtMDktMDVUMTg6Mjk6MTYuMDAwWiIsInByb2Zlc2lvbmFsSWQiOm51bGwsInByb2Zlc2lvbmFsIjpudWxsLCJpYXQiOjE0NzMyNTczMjcsImV4cCI6MTQ3MzI5MzMyN30.CKB-GiuvwJsDAVnKsWb1FktI9tJY57lSgPRVEfW3pts'; 
    var token = req.headers.authorization; 
    jwt.verify(token, 'shhhhh', function (err, decoded) { 
    if (err) { 
     res.status(403).json({ success: false, message: 'Failed to authenticate token.' }); 
    } else { 
     // if everything is good, save to request for use in other routes 
     req.user = decoded; 
     next(); 
    } 
    }); 
}; 

SwaggerExpress.create(config, function (err, swaggerExpress) { 
    if (err) { throw err; } 

    app.use(function (req, res, next) { 
    res.header("Access-Control-Allow-Origin", "*"); 
    res.header("Access-Control-Allow-Headers", "X-CSRF-Token, X-Requested-With, Origin, client-security-token, X-Requested-With, Content-Type, Accept, Authorization"); 
    res.setHeader('Content-Type', 'application/json'); 
    res.setHeader('Access-Control-Allow-Credentials', true); 
    next(); 
    }); 

    app.use(verifyToken); 

    // install middleware 
    swaggerExpress.register(app); 



    var port = process.env.PORT || 10010; 
    app.listen(port); 
}); 

내가 누락 어떻게 구성 모른다.

답변

0

이라는 크롬 플러그인을 사용하려고 브라우저에서 그 헤더를 설정해야합니다 var token = req.headers.authorization;가 될 var token = req.headers.authorization || req.query.access_token || req.body.access_token;

따라서 브라우저에서 "access_token"쿼리 매개 변수에 토큰을 추가하여 헤더를 설정하는 대신 서버에서 인증 할 수 있습니다.

희망이 있으면 도움이 될 것입니다.

0

문제점은 내가 OPTIONS 메소드에서 권한 부여 토큰을 얻으려고했는데, CORS 요청이있는 경우이 메소드는 실제 get, port, put 등 전에 보내집니다. 그래서 권한 부여 헤더를 얻으려고했는데 거기에 없었고 메서드가 실패했습니다. 해결 방법은 다음과 같은 유효성 검사를 확인 토큰 방법으로 설정하는 것입니다.

if (req.method !== OPTIONS){ 
} 
관련 문제