2017-02-16 2 views
0

Я пытаюсь отлаживать неудовлетворительную JWT настройки аутентификации, которая всегда возвращает 401.Нет журналов после Passport.js аутентификации промежуточного программного

Мой паспорт установки (middleware/auth.js)

import passport from 'passport' 
import { Strategy as JwtStrategy, ExtractJwt } from 'passport-jwt' 

module.exports = function() { 
    var options = {}; 
    options.jwtFromRequest = ExtractJwt.fromAuthHeader() 
    options.secretOrKey = 'superdupersecret' 

    var strategy = new JwtStrategy(options, function(payload, done) { 
    console.log('this is not printing')    <--------------- 
    var user = payload.sub || null; 
    if (user) { 
     return done(null, { id: user._id }); 
    } else { 
     return done(new Error("User not found"), null); 
    } 
    }); 

    passport.use(strategy); 

    return { 
    initialize:() => { 
     console.log('this only prints on boot');  <--------------- 
     return passport.initialize(); 
    }, 
    authenticate:() => { 
     console.log('this too')      <--------------- 
     return passport.authenticate("jwt", {session: false}); 
    } 
    }; 
}; 

Мой файл server.js где инициализирую паспорт:

import express from 'express' 
(...) 
var auth = require("./middleware/auth.js")(); 


// Instantiate app 
const app = express(); 

// Initialize passport for auth use 
app.use(auth.initialize()) 

И мой защищенный маршрут, который всегда возвращает 401:

import express from 'express' 
var auth = require("../middleware/auth.js")(); 

const userRouter = express.Router() 

userRouter.get('/dashboard', auth.authenticate(), (req, res) => { 
    res.send('It worked! User id is: ' + req.user + '.') 
}) 

export default userRouter 

Я попытался добавить заявления о печати в пределах фактического модуля passport.js, а также паспорт-jwt, без успеха.

После промежуточного программного обеспечения аутентификации на защищенном маршруте ничего не регистрируется.

Я пробовал тонну перестановки настроек over the past 3 days now. Любая помощь была бы принята с благодарностью

+0

что внутри auth.authenticate? это называется? – yBrodsky

+0

@yBrodsky auth.authenticate находится в возвращаемом объекте в первом примере кода. Он не регистрирует что-либо по запросу, но все равно возвращает 401 – softcode

+0

удаляет скобки() из userRouter.get ('/ dashboard', auth.authenticate() <--- это скобки – yBrodsky

ответ

1

Хорошо, я следил за учебником, о котором вы говорили, и, похоже, он работает. Вот некоторые примечания (некоторые могут быть очевидными, без обид).

  • Скопировать точно код как учебник
  • После того как вы все, что вам нужно «войти в систему». Отправьте запрос POST на адрес /token. Тип контента должен быть application/json, а в теле запроса вам нужно отправить объект с адресом электронной почты и паролем (из учебника).
  • После входа в систему сервер возвращает токен.
  • Возьмите этот токен и теперь сделайте запрос GET на /пользователь. В заголовках запроса добавьте: Авторизация: JWT [ваш токен здесь]. Вам нужно написать «JWT» и токен, разделенный одним пробелом.
  • Сервер возвращает статус 200. Я изменил так, чтобы он возвращал пользователя.

    app.get ("/ пользователь", auth.authenticate(), функция (REQ, разреш) { res.json ({пользователь: req.user}); });

+0

Спасибо за помощь @yBrodsky. Оказывается, когда я присоединяю JWT к заголовку auth, он должен быть преподнесен с помощью строки '' JWT ''. Это все фиксировало. – softcode

+0

Да. У меня есть приложение, которое использует JWT, и я сделал это сам, не используя паспорт. Паспорт в этом сценарии мало что делает, поэтому его само по себе дает вам возможность добавить некоторую гибкость (например, извлечение токена с разными заголовками, с помощью параметра или в теле. – yBrodsky

+0

Согласен. Однако я буду реализовывать различные стратегии аутентификации , поэтому консолидация их в комплексный пакет имеет смысл, я думаю. – softcode

Смежные вопросы