2017-01-04 2 views
0

잘 작동하지 않는 나는 node-jwt-simple/jwt-simplejwt의 만드는거야하지만 내 passport-jwt을 인증 미들웨어 인 것 같습니다 원인 어려움에 직면 전혀 부르지 않았다.여권-JWT 인증합니다 내가 어떤 경로를 인증하는 <code>passport-jwt</code>을 사용하고 노드 JWT-간단한

여기에 내가 여기에 그것을 넘어서 통합하고있어

const jwtOpts = { 
 
    jwtFromRequest: ExtractJwt.fromHeader('Authorization'), 
 
    secretOrKey: secret, 
 
}; 
 

 
passport.use(new jwtStrategy(jwtOpts, (payload, done) => { 
 

 
    console.log('payload ', payload.sub); 
 
    User.findById(payload.sub, (err, user) => { 
 
     
 
     if(err) { return done(err); } 
 

 
     if(!user) { console.log('didnt find!'); return done(null, false); } 
 

 
     done(null, user); 
 
    }); 
 
}));

여권 JWT-전략입니다.

노선들은 여기

router.get('/success', 
 
      passport.authenticate('jwt', {session: false}), 
 
      async (ctx, next) => ctx.body = await "success!");

도 내 jwt을 만드는 방법 파일.

function tokenForUser(user) { 
 
    
 
    const timeStamp = new Date().getTime; 
 
    return jwt.encode({sub: user._id, iat: timeStamp}, secret); 
 
} 
 

 
//- Later in signup process 
 

 
userToSave.save(async(err, user) => { 
 
    
 
    if(err) { return next(err); } 
 

 
    const token = await tokenForUser(user); 
 

 
    next(token); 
 
}); 
 

 

 
//- If this helps, here is how my secret file looks like. 
 

 
const secret = "JKAha23ja1ddHdjjf31"; 
 

 
export default secret;

문제는 내가 그 길을 쳤을 때 난 단지 Unauthorized을 얻고 콘솔 아무것도 내가 최초로 지정된 조차 '페이로드'키를 로그 아웃됩니다 온다.

내가 토큰을 가지고 있다고 말해야한다. ctx.request.get('Authorization') (Koa 기반) 나는 모든 경로에서 표현이있는 req.header('Authorization')과 같다고 생각한다.

또한 기반 문제node-jwt-simplehere의 GitHub의 문제에서 찾을 수 있습니다 정확한 표현은 넣다 내 코드 샘플에 문제가있다.

감사합니다.

답변

1

내가 머리를 감싼 후에 나는 이것이 전체 인증 과정이 어떻게 작동하는지에 대한 나의 끔찍한 이해라는 것을 알았다. 내가 ctx.get('Authorization')에서 토큰을 디코딩 할 때

은 내가 우체부에 인증 헤더를 하드 코딩하고 "을 생각했다 때문에 DB 에 저장된 것과 다른 _id있어 나는 내가에 하드 코딩을 대체 할 ctx.set('Authorization', token); 경우 우편 집배원".

프런트 엔드에서 http 전화를 걸면이 jwt이 요청 헤더에 포함되지 않을 것이라고 생각하지 않았습니다.

나는 순진하게도 jwt의 나중에 올바른 방법이다 만든 요청을 짜 ajax 프로세스 서버에서 브라우저로 서버 (문제 방법 render 작품 등) 하지에서 직접 전달됩니다 생각했다.

전체 코드는 훌륭합니다. 단, 가입 할 때 생성 한 후에 토큰 ctx.body = token;을 전달해야합니다.

감사합니다.

관련 문제