i'm building node.js application integrated passport-account system. since i'm hosted on uberspace.de, need configure .htaccess in main web-root so:
rewriteengine on rewriterule ^(.*) http://localhost:34457/$1 [p] my express-route login is: (accessible @ /api/auth/login)
router.post('/login', passport.authenticate('login', { successredirect: '/account', failureredirect: '/login?error=true' })); as how understand passport, if successful login performed, should redirected /account , if not, /login?error=true.
but if perform post using
url --data "email=foo@bar.com&password=test" http://[domain]/api/auth/login the result is:
<!doctype html public "-//ietf//dtd html 2.0//en"> <html><head> <title>502 proxy error</title> </head><body> <h1>proxy error</h1> <p>the proxy server received invalid response upstream server.<br /> proxy server not handle request <em><a href="/api/auth/login">post /api/auth/login</a></em>.<p> reason: <strong>error reading remote server</strong></p></p> <hr> <address>apache/2.2.15 (centos) server @ [domain] port 80</address> </body></html> and if execute same query html-form (method: post, action: /api/auth/login) in chrome, redirected /api/auth/login%5e (which obivously returns 404).
simple redirects 1 work:
router.post('/redirecttohome', function(req, res, next) { res.redirect(302, '/'); }); but if perform function when calling /api/auth/login
router.post('/login', function(req, res, next) { passport.authenticate('login', function(err, user, info) { if (err) return next(err); if (!user) { console.log(info); return res.json(401, {success: false}); } else { console.log(info); return res.json(200, {success: true}); } })(req, res, next); }); i still redirected /api/auth/login%5e.
my authentification-strategy login implemented as:
var localstrategy = require('passport-local').strategy; var user = require('../models/user'); var bcrypt = require('bcrypt-nodejs'); module.exports = function(passport){ passport.use('login', new localstrategy({ usernamefield: 'email', passreqtocallback : true }, function(req, email, password, done) { // check in mongo if user username exists or not user.findone({ 'email' : email }, function(err, user) { // in case of error, return using done method if (err) return done(err); // username not exist, log error , redirect if (!user){ console.log('user not found email '+email); return done(null, false, req.flash('message', 'user not found.')); } // user exists wrong password, log error if (!isvalidpassword(user, password)){ console.log('invalid password'); return done(null, false, req.flash('message', 'invalid password')); // redirect login page } // user , password both match, return user done method // treated success return done(null, user); }); })); var isvalidpassword = function(user, password){ return bcrypt.comparesync(password, user.password); } } even if login-router written follows:
router.post('/login', function(req, res, next) { passport.authenticate('login', function(err, user, info) { if (err) return next(err); if (!user) { console.log(info); return res.json(401, {success: false}); } else { console.log(info); return res.json(200, {success: true}); } })(req, res, next); }); i still redirected /api/auth/login%5e.
my passport login-strategy implemented so:
var localstrategy = require('passport-local').strategy; var user = require('../models/user'); var bcrypt = require('bcrypt-nodejs'); module.exports = function(passport){ passport.use('login', new localstrategy({ usernamefield: 'email', passreqtocallback : true }, function(req, email, password, done) { // check in mongo if user username exists or not user.findone({ 'email' : email }, function(err, user) { // in case of error, return using done method if (err) return done(err); // username not exist, log error , redirect if (!user){ console.log('user not found email '+email); return done(null, false, req.flash('message', 'user not found.')); } // user exists wrong password, log error if (!isvalidpassword(user, password)){ console.log('invalid password'); return done(null, false, req.flash('message', 'invalid password')); // redirect login page } // user , password both match, return user done method // treated success return done(null, user); }); })); var isvalidpassword = function(user, password){ return bcrypt.comparesync(password, user.password); } } what problem?
actually, problem invisible character, redirected me other page, made bunch of other things go wrong.
Comments
Post a Comment