2016-12-04 37 views
0

私は基本的なログイン/ログアウトシステムにpassport.jsを使用しています。何らかの理由で、router.get('/signout', function(req, res))は、アドバンスドレストクライアントでhttp://localhost:3000/auth/signoutを実行したときに呼び出されていません。代わりに私は内部サーバーエラー: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 queryで呼び出されないようにしていませんか? –

関連する問題