2016-12-04 185 views
0

我正在使用passport.js進行基本的登錄/註銷系統。由於某些原因,當我在Advanced rest客戶端上運行http://localhost:3000/auth/signout時,router.get('/signout', function(req, res))未被調用。相反,我得到一個內部服務器錯誤:500.登錄工作得很好,但登出不。這是我的app.js和authenticate.js:router.get函數未被調用

App.js

var express = require('express'); 
var path = require('path'); 
var favicon = require('serve-favicon'); 
var logger = require('morgan'); 
var passport = require('passport'); 
var session = require('express-session'); 
var cookieParser = require('cookie-parser'); 
var bodyParser = require('body-parser'); 
//Initialize models 
require('./models/models.js'); 
var api = require('./routes/api'); 
var authenticate = require('./routes/authenticate')(passport); 
var mongoose = require('mongoose'); 

//connect to mongodb 
mongoose.connect("mongodb://localhost:27017/chirp-test"); 

var app = express(); 

// view engine setup 
app.set('views', path.join(__dirname, 'views')); 
app.set('view engine', 'ejs'); 

// uncomment after placing your favicon in /public 
//app.use(favicon(path.join(__dirname, 'public', 'favicon.ico'))); 
app.use(logger('dev')); 
app.use(session({ 
    secret: 'super duper secret' 
})); 
app.use(bodyParser.json()); 
app.use(bodyParser.urlencoded({ extended: false })); 
app.use(cookieParser()); 
app.use(express.static(path.join(__dirname, 'public'))); 
app.use(passport.initialize()); 
app.use(passport.session()); //This creates a unique has for our session 


//Initialize Passport 
var initPassport = require('./passport-init'); 
initPassport(passport); 

app.use('/auth', authenticate); 
app.use('/api', api); 


// catch 404 and forward to error handler 
app.use(function(req, res, next) { 
    var err = new Error('Not Found'); 
    err.status = 404; 
    next(err); 
}); 

// error handler 
app.use(function(err, req, res, next) { 
    // set locals, only providing error in development 
    res.locals.message = err.message; 
    res.locals.error = req.app.get('env') === 'development' ? err : {}; 
    // render the error page 
    res.status(err.status || 500); 
    res.render('error'); 
}); 

module.exports = app; 

Authenticate.js

var express = require('express'); 
var router = express.Router(); 

module.exports = function(passport){ 

    //sends successful login state back to angular 
    router.post('/success', function(req, res){ 
     console.log('successful'); 
     res.send({state: 'success', user: req.user ? req.user : null}); 
    }); 

    //sends failure login state back to angular 
    router.get('/failure', function(req, res){ 
     res.send({state: 'failure', user: null, message: "Invalid username or password"}); 
    }); 

    //log in 
    router.post('/login', passport.authenticate('login', { failureRedirect: '/auth/failure' }), 
     function(req, res) { 
      //res.redirect('/auth/success'); 
      res.send({state: 'success', user: req.user ? req.user : null}); 
     }); 


    //sign up 
    router.post('/signup', passport.authenticate('signup', { 
     successRedirect: '/auth/success', 
     failureRedirect: '/auth/failure' 
    })); 

    //log out 
    router.get('/signout', function(req, res) { 
     console.log('Signing out...'); 
     req.logout(); 
     res.redirect('/'); 
    }); 

    return router; 

} 

回答

0

,您已經註冊中 「/」 沒什麼。所以當「auth/logout」調用重定向到重定向(「/」),我猜客戶端被重定向,但進入你的「錯誤處理程序」,它發送500錯誤...

+0

- >嘗試重定向到「api /」代替;它似乎是你的應用程序的根,如果我明白你是如何構建它。 –

+0

不幸的是,控制檯也沒有登錄登出,所以就好像它根本沒有調用函數。改變它,但仍然無法正常工作 –

+0

所以錯誤可能來自'req.logout()'...你確定某種安全措施不能阻止req.logout被get查詢調用嗎? –