I've implemented a registration form in a modal to save a user to my database and subsequently log them in. The user is indeed saved to my database, but the user object remains undefined.
Here is my setup in app.js
var express = require('express'),
app = express(),
exphbs = require('express-handlebars'),
passport = require('passport'),
bodyParser = require('body-parser'),
cookieParser = require('cookie-parser'),
morgan = require('morgan'),
methodOverride = require('method-override'),
session = require('express-session'),
funct = require('./app/functions'),
dbconfig = require('./app/config/database'),
db = require('orchestrate')(dbconfig.db),
LocalStrategy = require('passport-local');
//===============PASSPORT===============
passport.serializeUser(function(user, done) {
console.log("serializing " + user.username);
done(null, user.username);
});
passport.deserializeUser(function(obj, done) {
console.log("deserializing " + obj);
done(null, obj);
});
passport.use('local-signup', new LocalStrategy(
{passReqToCallback: true}, //allows us to pass back the request to the callback
function (req, username, password, done) {
funct.localReg(username, password)
.then(function (user) {
if (user) {
console.log("REGISTERED: " + user.username);
req.login(user, function(err) {
if (err) {
console.log(err);
}
});
done(null, user);
}
if (!user) {
console.log("COULD NOT REGISTER");
req.session.error = 'That username is already in use, please try a different one.'; //inform user could not log them in
done(null, user);
}
})
.fail(function (err) {
console.log(err.body);
});
}
));
//===============EXPRESS================
// Configure Express
app.use(morgan('combined')); // log every request to the console
app.use(cookieParser()); // read cookies (needed for auth)
app.use(bodyParser.urlencoded({extended: false}));
app.use(bodyParser.json());
app.use(session({secret: 'MisfireMedia_Appubator', saveUninitialized: true, resave: true}));
app.use(passport.initialize());
app.use(passport.session());
app.get('/about', function (req, res) {
res.render('about');
});
app.post('/signup', passport.authenticate('local-signup', {
successRedirect: '/about',
failureRedirect: '/'
})
);
And here's my function.js (where funct.localReg is defined)
var bcrypt = require('bcrypt'),
Q = require('q'),
dbconfig = require('./config/database'), //config file contains all tokens and other private info
db = require('orchestrate')(dbconfig.db); //config.db holds Orchestrate token
exports.localReg = function (username, password) {
console.log(password);
var deferred = Q.defer();
var user = {
"username": username,
"password": password
};
//check if username is already assigned in our database
db.get('users', username)
.then(function (result){ //case in which user already exists in db
console.log('username already exists');
deferred.resolve(false); //username already exists
})
.fail(function (result) {//case in which user does not already exist in db
console.log(result.body);
if (result.body.message == 'The requested items could not be found.'){
console.log('Username is free for use');
db.put('users', username, user)
.then(function () {
console.log("USER: " + user);
deferred.resolve(user);
})
.fail(function (err) {
console.log("PUT FAIL:" + err.body);
deferred.reject(new Error(err.body));
});
} else {
deferred.reject(new Error(result.body));
}
});
return deferred.promise;
};
The modal form is being submitted with code in custom.js:
$(function() {
$("button#signupsubmit").click(function(){
$.ajax({
type: "POST",
url: "/signup",
data: $('form#signup').serialize(),
success: function(msg){
$("#myModal").modal('hide');
},
error: function(){
alert("failure");
}
});
});
});
However, once the modal hides (on successful post) I try to log out the user and get "user is not defined". Also, attempting to display the username with
{{#if user}}
<p>Hi, {{user.username}}</p>
{{/if}}
just gives me "Hi,"
So any ideas on why I can't access the user? I'm not especially experienced with Node, Express, or Passport and I don't quite fully understand what's going on yet because most of this is copypasta from tutorials and whatnot (specifically this one). Any suggestions on what to look at or what I'm missing would be most excellent.
Aucun commentaire:
Enregistrer un commentaire