【问题标题】:Node js passport redirect results in 404Node js护照重定向结果为404
【发布时间】:2016-06-14 05:01:22
【问题描述】:

我正在使用我的电子邮件和密码向 /login 发出发布请求,passport 正确验证了它,没有调用错误,然后返回 res.redirect('/profile') 也运行了。但它返回 404。

这是我尝试的两个登录功能,它们都导致“GET /profile 404”,即使当我正常执行“GET /profile”时它返回 200

//     router.post('/login', passport.authenticate('local-login', {
//       successRedirect : '/profile', // redirect to the secure profile section
//       failureRedirect : '/login' // redirect back to the signup page if there is an error
//     }));

router.post('/login', function(req, res, next) {
  passport.authenticate('local-login', function(err, user) {
    if (err) { return next(err); }
    if (!user) { return res.redirect('/login'); }
    req.logIn(user, function(err) {
      if (err) { return next(err); }
      console.log("thisgetsrun")
      return res.redirect('/profile');
    });
  })(req, res, next);
});

这里是 /profile

router.get('/profile', isLoggedIn, function(req, res) {
    console.log("profile")
    res.render('profile');
});

并且是登录

function isLoggedIn(req, res, next) {
    console.log("is logged in")
    if (req.isAuthenticated())
        return next();
    res.redirect('/');
}

不会打印控制台登录 isloggedin 或配置文件

最后是我的 app.js

var express = require('express');
var path = require('path');
var favicon = require('serve-favicon');
var logger = require('morgan');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');
var passport = require('passport');
require('./config/passport')(passport)
var mongo = require('mongodb');
var monk = require('monk');
var db = monk("mongodb.........");
var routes = require('./routes/index');
var users = require('./routes/users');

var session = require('express-session');
var app = express();

 ....

app.use(function(req,res,next){
    req.db = db;
    next();
});

app.use(session({ secret: 'blah' })); // session secret
app.use(passport.initialize());
app.use(passport.session()); // persistent login sessions

app.use('/', routes);
app.use('/users', users);

app.use(function(err, req, res, next) {
  res.status(404);
  res.render('404');
});

module.exports = app;

有人知道为什么会这样吗?

【问题讨论】:

    标签: javascript node.js passport.js passport-local


    【解决方案1】:

    您确定视图profile 存在并且相对于视图引擎定位正确吗?当您通常执行“GET /profile”时,isLoggedIn 重定向到'/',因为req.isAuthenticated()false,所以问题是当用户登录并调用res.render('profile'); 时。确保您有类似于以下内容的视图引擎设置:

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

    profile 视图位于 views 文件夹内。

    【讨论】:

    • 我最终不得不通过路线传递护照。是序列化或什么的问题
    猜你喜欢
    • 2014-08-27
    • 2018-03-03
    • 1970-01-01
    • 1970-01-01
    • 2016-09-07
    • 2017-09-14
    • 2020-04-18
    • 2020-11-29
    • 2019-01-26
    相关资源
    最近更新 更多