admin管理员组文章数量:1401158
I'm new to Node.js. Trying to set up user account creation and log in using Passport.
I chose Passport due to its popularity, however I can't seem to piece together a working authentication process based off of the documentation on the Passport site.
Does anyone know of a tutorial for setting this up? Preferably one where you can download the source code.
I'll share my app.js file, perhaps that will reveal what is lacking.
var express = require('express')
, routes = require('./routes')
, home = require('./routes/home')
, user = require('./routes/user')
, http = require('http')
, path = require('path')
, passport = require('passport')
, LocalStrategy = require('passport-local').Strategy
, flash = require('connect-flash');
var app = express();
app.configure(function(){
app.set('port', process.env.PORT || 3000);
app.set('views', __dirname + '/views');
app.set('view engine', 'jade');
app.use(express.favicon());
app.use(express.logger('dev'));
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(express.cookieParser());
app.use(express.session({ cookie: { maxAge: 60000 }, secret: 'keyboard cat' }));
app.use(flash());
app.use(passport.initialize());
app.use(passport.session());
app.use(app.router);
app.use(express.static(path.join(__dirname, 'public')));
});
app.configure('development', function(){
app.use(express.errorHandler());
});
passport.serializeUser(function(user, done) {
done(null, user);
});
passport.deserializeUser(function(obj, done) {
done(null, obj);
});
passport.use(new LocalStrategy({
usernameField: 'email',
passwordField: 'password'
},
function(username, password, done) {
User.findOne({ username: username }, function(err, user) {
if (err) {
return done(err);
}
if (!user) {
return done(null, false, { message: 'Incorrect username.' });
}
if (!user.validPassword(password)) {
return done(null, false, { message: 'Incorrect password.' });
}
return done(null, user);
});
}
));
app.get('/', routes.index);
app.post('/login',
passport.authenticate('local', {
successRedirect: '/home',
failureRedirect: '/',
failureFlash: true
})
);
app.get('/home', home.dashboard);
app.get('/users', user.list);
http.createServer(app).listen(app.get('port'), function(){
console.log("Express server listening on port " + app.get('port'));
});
Note: This code simply returns me to the root page when attempting to log in. I realize that I don't have any actual user accounts at this point, however I would like to at least get a successful log in with a fake user. What am I missing?
I'm new to Node.js. Trying to set up user account creation and log in using Passport.
I chose Passport due to its popularity, however I can't seem to piece together a working authentication process based off of the documentation on the Passport site.
Does anyone know of a tutorial for setting this up? Preferably one where you can download the source code.
I'll share my app.js file, perhaps that will reveal what is lacking.
var express = require('express')
, routes = require('./routes')
, home = require('./routes/home')
, user = require('./routes/user')
, http = require('http')
, path = require('path')
, passport = require('passport')
, LocalStrategy = require('passport-local').Strategy
, flash = require('connect-flash');
var app = express();
app.configure(function(){
app.set('port', process.env.PORT || 3000);
app.set('views', __dirname + '/views');
app.set('view engine', 'jade');
app.use(express.favicon());
app.use(express.logger('dev'));
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(express.cookieParser());
app.use(express.session({ cookie: { maxAge: 60000 }, secret: 'keyboard cat' }));
app.use(flash());
app.use(passport.initialize());
app.use(passport.session());
app.use(app.router);
app.use(express.static(path.join(__dirname, 'public')));
});
app.configure('development', function(){
app.use(express.errorHandler());
});
passport.serializeUser(function(user, done) {
done(null, user);
});
passport.deserializeUser(function(obj, done) {
done(null, obj);
});
passport.use(new LocalStrategy({
usernameField: 'email',
passwordField: 'password'
},
function(username, password, done) {
User.findOne({ username: username }, function(err, user) {
if (err) {
return done(err);
}
if (!user) {
return done(null, false, { message: 'Incorrect username.' });
}
if (!user.validPassword(password)) {
return done(null, false, { message: 'Incorrect password.' });
}
return done(null, user);
});
}
));
app.get('/', routes.index);
app.post('/login',
passport.authenticate('local', {
successRedirect: '/home',
failureRedirect: '/',
failureFlash: true
})
);
app.get('/home', home.dashboard);
app.get('/users', user.list);
http.createServer(app).listen(app.get('port'), function(){
console.log("Express server listening on port " + app.get('port'));
});
Note: This code simply returns me to the root page when attempting to log in. I realize that I don't have any actual user accounts at this point, however I would like to at least get a successful log in with a fake user. What am I missing?
Share Improve this question edited Jan 6, 2015 at 15:26 laggingreflex 34.7k36 gold badges144 silver badges200 bronze badges asked Dec 17, 2012 at 2:37 AndrewHendersonAndrewHenderson 4,9923 gold badges29 silver badges34 bronze badges2 Answers
Reset to default 7var express = require('express')
, routes = require('./routes')
, home = require('./routes/home')
, user = require('./routes/user')
, http = require('http')
, mongodb = require('mongodb')
, mongoose = require('mongoose')
, path = require('path')
, passport = require('passport')
, LocalStrategy = require('passport-local').Strategy
, flash = require('connect-flash')
;
var app = express();
mongoose.connect('mongodb://localhost/test');
var db = mongoose.connection;
db.on('error', console.error.bind(console, 'connection error:'));
db.once('open', function callback () {
console.log('Connected to DB');
});
var userSchema = mongoose.Schema({
username: String,
password: String
});
userSchema.methods.validPassword = function (password) {
if (password === this.password) {
return true;
} else {
return false;
}
}
var User = mongoose.model('User', userSchema);
var user = new User({ username: 'andrew', password: 'secret' });
user.save();
app.configure(function(){
app.set('port', process.env.PORT || 3000);
app.set('views', __dirname + '/views');
app.set('view engine', 'jade');
app.use(express.favicon());
app.use(express.logger('dev'));
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(express.cookieParser());
app.use(express.session({ cookie: { maxAge: 60000 }, secret: 'keyboard cat' }));
app.use(flash());
app.use(passport.initialize());
app.use(passport.session());
app.use(app.router);
app.use(express.static(path.join(__dirname, 'public')));
});
app.configure('development', function(){
app.use(express.errorHandler());
});
passport.serializeUser(function(user, done) {
done(null, user);
});
passport.deserializeUser(function(obj, done) {
done(null, obj);
});
passport.use(new LocalStrategy(function(username, password, done) {
User.findOne({ username: username }, function(err, user) {
if (err) {
return done(err);
}
if (!user) {
return done(null, false, { message: 'Incorrect username.' });
}
if (!user.validPassword(password)) {
return done(null, false, { message: 'Incorrect password.' });
}
return done(null, user);
});
}
));
app.get('/', routes.index);
app.post('/login',
passport.authenticate('local', {
successRedirect: '/home',
failureRedirect: '/',
failureFlash: true
})
);
app.get('/home', home.dashboard);
app.get('/users', user.list);
http.createServer(app).listen(app.get('port'), function(){
console.log("Express server listening on port " + app.get('port'));
});
There is an example using passport-local
with Express
as a part of the passport-local source. It may be helpful to set the failureRedirect
of the passport.authenticate
call to the login
page and add the necessary code to your login view template to show flash messages, see the linked source. If you need more help, check out the source of the other passport modules.
It appears that the problem might be in the callback for the LocalStrategy
. The User
model does not appear to have been required.
本文标签: javascriptCan39t set up Passport with Express and MongoDBMongooseSample CodeStack Overflow
版权声明:本文标题:javascript - Can't set up Passport with Express and MongoDBMongoose - Sample Code? - Stack Overflow 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/web/1744303554a2599699.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论