2016-08-21 1 views
6

현재 JSONWebtoken을 사용하여 NodeJS로 API를 작성하고 있습니다. 헤더에서 토큰을 사용하려고하면 403 오류가 발생하고 토큰이 전혀 없다는 것을 의미하는 아래 코드의 else 문으로 직접 이동합니다.지속적으로 오류가 발생하여 JWT로 JWT 사용하기

클라이언트 측에
router.use(function(req, res, next){ 

var token = req.body.token || req.query.token || req.headers['x-access-token']; 

    //decode token 
    if(token) { 
    jwt.verify(token, app.get('secretKey'), function(err, decoded){ 
     if(err) 
     return res.json({ success:false, message: 'failed, token problem'}); 
     else { 
     req.decoded = decoded; 
     next(); 
     } 
    }); 
    }else { 
    return res.status(403).send({ 
     success:false, 
     message: 'token not provided' 
    }) 
    } 
}); 

, 내가 jQuery를 사용하고있어 쿠키에 저장 :

  1. 토큰 데이터 작품으로 여기

    내가 서버 측에 토큰을 얻는 방법이다 : 매개 변수로

    $.ajax({ 
        type:'GET', 
        dataType: 'jsonp', 
        url :"http://localhost:3000/api/users", 
        data : { 
        token : $.cookie('token') 
        }, 
        success: function(data, status) { 
        console.log("Status " + status); 
        console.log(data); 
        } 
    }); 
    
  2. 토큰이 너무

    01 일 여기
    $.get("http://localhost:3000/api/users?token=" + $.cookie('token')) 
    .done(function(data){ 
        console.log(data); 
    }); 
    
  3. 23,516,나는 인 (403)가 계속 ajaxSetup

    에 헤더를
    $.ajaxSetup({ 
          headers: { 
          'x-access-token': $.cookie('token') 
          } 
         }); 
    

    을 헤더로

    $.ajax({ 
        type:'GET', 
        url :"http://localhost:3000/api/users", 
        beforeSend: function(xhr) { 
        xhr.setRequestHeader("Authorization", "Bearer " + $.cookie('token')); 
        }, 
        success: function(data, status) { 
        console.log("Status " + status); 
        console.log(data); 
        } 
    }); 
    

나는 또한 시도 추가 X-액세스 토큰을 사용하여 문제 토큰이 제공되지 않습니다. CORS 문제이므로 CORS npm 패키지 https://github.com/expressjs/cors을 사용해 보았습니다.이 기능을 구현하려고 시도했습니다. 내가 Safari에서 다음, 그것은 작동 사용하는 경우

app.use(function(req, res, next){ 
    res.header('Access-Control-Allow-Origin', '*'); 
    res.header('Access-Control-Allow-Methods', 'GET, PUT, POST, DELETE'); 
    res.header('Access-Control-Allow-Headers', 'Content-Type'); 
    next(); 
}); 

// 2016년 8월 22일

에 대한 정보를 업데이트합니다

$.ajax({ 
     type:'GET', 
     url :"http://localhost:3000/api/users", 
     headers : { "Authorization" : $.cookie('token') }, 
     success: function(data, status) { 
     console.log("Status " + status); 
     console.log(data); 
     } 
    }); 

그러나 일부는 경우와 다른 문 모두에 어떻게되는지, 그래서 다음 경로에 응답하지만 403 메시지도 표시합니다.

+0

합니까 당신은 서버 측 코드를 사용하여

https://github.com/expressjs/cors 

지금까지 작동 노드 패키지를 사용하여 설정 내 고르 변경? 다른 방법으로 검증을 실행했지만 성공적이지만 쿠키가 성공적이지 않은 경우 토큰의 유효성을 검사하기 전에 쿠키에서 'Bearer'를 제거하는 것을 잊지 않았습니까? – Mike

+0

@Mike 서버 코드를 업데이트하면 문제가 직접 토큰을 의미하는 else 문으로 이동합니다. – Hilmanrdn

+0

아약스 헤더에서 개체를 사용하려고 시도합니다. { 'X-Auth-Token': 토큰} 또는 .. 헤더 : '인증': '무기명'+ $ .cookie ('토큰') 또한 'Content-Type'헤더 : 'application/json', 'Accept': 'application/json' – owaishanif786

답변

0

나는

$.ajax({ 
      type:'GET', 
      url :"http://localhost:3000/api/users", 
      headers: {'x-access-token': $.cookie('token')}, 
      success: function(data, status) { 
      console.log("Status " + status); 
      console.log(data); 
      } 
     });