NodeJS登录授权后路由重定向

时间:2017-12-07 11:03:44

标签: javascript node.js passport.js

我正在开发NodeJS应用程序登录。与此问题相关的四条路线是

GET /admin/login -- Used to get the Login Page (1)
POST /admin/login -- Used to go to Controller (2)
POST /api/auth/login requireLogin -- Actual login happens here (3)
GET /admin/dashboard requireAuth-- Route to go after successful login (4)

路线定义:

(1) adminRoutes.get('/admin/login', HomeController.getLoginPage);
(2) adminRoutes.post('/admin/login', AdminController.postLoginPage);
(3) authRoutes.post('/api/auth/login', requireLogin, AuthenticationController.login);
(4) adminRoutes.get('/admin/dashboard', requireAuth, HomeController.index);

requireLoginrequireAuth

的值
var requireAuth = passport.authenticate('jwt', {session: false, failureRedirect: '/admin/login'}),
    requireLogin = passport.authenticate('local', {session: false});

从(1)我填写登录详细信息并点击提交,表单操作将其带到(2)。对于(2),我有一个像这样写的方法;

(2)的方法

 exports.postLoginPage = function(req, res, next){
   request.post({url: 'http://localhost:3006/api/auth/login', form: req.body}, function(err, response, body){
     console.log('outside if');
     if(response.statusCode == '200'){
       console.log('inside if 200');
       var wegot = JSON.parse(response.body);
        console.log(wegot.token);
        res.header('Authorization', wegot.token);
       res.redirect('/admin/dashboard');
     }else{
       console.log('if else err');
       req.flash('error', body);
      // return res.redirect('/admin/login');
      return 'Unauthorized';
     }
   })
 }

方法(3)

function generateToken(user){
    return jwt.sign(user, authConfig.secret, {
        expiresIn: 10080
    });
}

function setUserInfo(request){
    return {
        _id: request._id,
        email: request.email,
        role: request.role
    };
}

exports.login = function(req, res, next){
    var userInfo = setUserInfo(req.body);
    res.status(200).json({
        token: 'JWT ' + generateToken(userInfo),
        user: userInfo
    });
}

从API(3)成功登录后,我需要重定向到(4)。但我要回到(1)。我知道登录成功,我也在日志上获得JWT令牌。

日志:

POST /api/auth/login 200 32.445 ms - 330
outside if
inside if 200
JWT eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJfaWQiOiI1YTI5MDQ3MGU4Nzc3YTM1OTQ2Mjk5YWEiLCJlbWFpbCI6InNwb25zb3JAZ21haWwuY29tIiwicm9sZSI6Im5pZ2h0IiwiaWF0IjoxNTEyNjQzODM0LCJleHAiOjE1MTI2NTM5MTR9.J5LqkfeSrRU4ukY9rIsFNUBArTLloynRsle4mkwTgpA
POST /admin/login 302 57.531 ms - 76
GET /admin/dashboard 302 2.690 ms - 68
GET /admin/login 200 1.581 ms - -

这可能是什么问题?我该怎么解决这个问题。如果您需要更多信息,请与我们联系。

1 个答案:

答案 0 :(得分:0)

  

POST /admin/login 302 57.531 ms - 76 GET /admin/dashboard 302 2.690 ms - 68 GET /admin/login 200 1.581 ms - -

您的回复状态代码为302,表示您已被重定向。显然/admin/dashboard不接受您的授权令牌。