【发布时间】:2017-05-15 10:57:51
【问题描述】:
所以我使用 express 和 mongoDB 构建了我的第一个应用程序,我在身份验证方面遇到了一些问题,我使用 MEAN Web 开发书按照 MVC 模式构建了我的文件夹结构,然后我开始使用本教程和尝试构建 oauth 身份验证,但在开始真正执行 oauth 之前,我卡在本地身份验证上,当我尝试提交它一直加载的表单并且从不给我回复时,使用邮递员我得到了一个 无法得到任何响应,我不知道是什么导致了这个问题,因为我有很多代码而且我不知道什么样的错误会导致这个我将把我的 gitProject 放在这里。
文件夹结构:
git:project
我觉得问题可能取决于我如何通过护照模块:
.config/express
var config = require('./config');
var express = require('express');
var passport = require('passport');
var flash = require('connect-flash');
var compress = require('compression');
var cookieParser = require('cookie-parser');
var session = require('express-session');
var bodyParser = require('body-parser');
var morgan = require('morgan');
var methodOverride = require('method-override');
var expressLayouts = require('express-ejs-layouts');
module.exports = function(){
var app = express();
require('./passport')(passport);
if(process.env.NODE_ENV === 'development')
{
app.use(morgan('dev'));
}
else if(process.env.NODE_ENV === 'production')
{
app.use(compress());
}
app.use(cookieParser());
app.use(bodyParser.urlencoded({
extended:true
}));
app.use(morgan('dev'));
app.use(bodyParser.json());
app.use(methodOverride());
app.use(session({
saveUninitialized: true,
resave: true,
secret: 'keyboard'
}));
app.use(passport.initialize());
app.use(passport.session()); // persistent login sessions
app.use(flash());
app.set('views', './app/views');
app.set('view engine','ejs');
app.use(expressLayouts);
require('../app/routes/index.server.routes.js')(app,passport);
require('../app/routes/register.server.routes.js')(app,passport);
require('../app/routes/login.server.routes.js')(app,passport);
require('../app/routes/profile.server.routes.js')(app,passport);
app.use(express.static('./public'));
return app;
}
..app/routes/register.server.routes.js
var register = require('../../app/controllers/register.server.controller');
module.exports = function(app,passport) {
app.route('/register')
.post(function(req,res){
passport.authenticate('local-signup', {
successRedirect : '/profile', // redirect to the secure profile section
failureRedirect : '/register', // redirect back to the signup page if there is an error
failureFlash : true // allow flash messages
})})
.get(register.getPage);
};
【问题讨论】:
-
如果它不断重新加载意味着可能存在无限递归的情况。是不是在失败时您将用户返回到 /register 再次调用 /register 等等?
-
但以我的方式不应该那样做,我有一个到 /register 的获取请求和一个到 /register 的帖子,第二个是通过表单提交激活的,所以它不应该处于无限递归中:S
-
你是对的,应该是这样的。我怀疑在加载页面时您可能正在进行默认的帖子调用。
-
您可以使用我的 gitproject 自己测试应用程序,对于我作为新手来说,在这种情况下很难确切知道错误可能在哪里对不起:/
-
另一件事是我不确定这个护照重定向是如何工作的,通常我们使用 res.redirect 等。但这只是一个猜测。
标签: node.js mongodb express oauth-2.0 passport.js