0

I use node.js + passport.js + sequelize.js(postgressql)

When I start the server and go to the pages, everything works and is displayed when I start the registration and send a request to it. Then the data in the database is transferred to the database in the database adding a new row to the table, but the request for a redirect ends in that it gives an answer in a few minutes that the page is not available, what am I doing wrong?

server.js

const express = require('express');
const app = express();
const bodyParser = require('body-parser');
const session = require('express-session');
const passport = require('passport');
const localStrategy = require('passport-local').Strategy;
const db = require('./db');
const morgan = require('morgan');
const flash = require('connect-flash');
require('./passport');

//require('./config/passport')(passport);
//const { Kik } = require('./db');
//const { proverkaUser } = require('./db');

app.use(bodyParser.urlencoded({extended: false}));
app.use(session({
  secret: 'oursercret',
  resave: true,
  saveUnitialized: true
}));
app.use(passport.initialize());
app.use(passport.session());
app.use(morgan('dev'));
app.use(require('./routes'));

app.set('view engine', 'ejs');
//app.set('views', './pages')




app.listen(8000, function(err){
  if(!err){
    console.log('OK');
  } else {
    console.log('WTF?');
  }
});

db.js

const Sequelize = require('sequelize');

var opt = {
  schema: 'kik_shema'
};

const db = new Sequelize('postgres://alejandro:Leomessi10@localhost:5434/bd', opt);

const User = db.define('kik', {
  email: Sequelize.STRING,
  password: Sequelize.STRING,
   
}, {
  timestamps: false, 
});

module.exports = {
  User,
  db
};

passport.js

const passport = require('passport');
var LocalStrategy = require('passport-local').Strategy;
var { User } = require('./db');



  passport.serializeUser(function(user, done){
    done(null, user.id);
  });

  passport.deserializeUser(function(id, done){
    User.findById(id, function(err, user){
      done(err, user);
    });
  });

passport.use('signin', new LocalStrategy(
    {
        usernameField: 'email',
        passwordField: 'password'
    },
    async (email, password, done) => {
        try {
            const user = await User.findOne({
                where: { email }
            });

            if (!user) {
                done(null, false, {
                    message: 'Incorrect email'
                    // Better
                    // message: 'Incorrect email or password'
                });

                return;
            }

            if (user.password !== password) {
                done(null, false, {
                    message: 'Incorrect password'
                    // Better
                    // message: 'Incorrect email or password'
                });

                return;
            }

            done(null, user);
        } catch (error) {
            done(error);
        }
    })
);

passport.use('signup', new LocalStrategy(
    {
        usernameField: 'email',
        passwordField: 'password'
    },
    async (email, password, done) => {
        try {
            const findUser = await User.findOne({
                where: { email }
            });

            if (findUser) {
                done(null, false, {
                    message: 'Email already taken'
                });

                return;
            }

            const user = await User.create({
                email,
                password
            });

            done(null, user);
        } catch (error) {
            done(error);
        }
    }
));

routes.js

const passport = require('passport');
const { Router } = require('express');
const router = new Router();

router.get('/signup', (req, res) => {
    res.render('signup');
});

router.get('/signin', (req, res) => {
    res.render('signin');
});

router.get('/index', (req, res) => {
    res.render('index');
});

router.post('/index', (req, res) => {
    res.render('index');
});

router.post('/signup', passport.authenticate('signup', {
       successRedirect: '/index', //из passport.use берется signup
       failureRedirect: '/signup',
       failureFlash: true
     }));






module.exports = router;

1 Answers1

0

PREVIOUS ANSWER, ADDRESSED IN COMMENTS:

Express' res.redirect() method retains the original HTTP method type. As a result, when your router.post('/signup', ...) handler redirects to /index or /signup, it makes a POST request to these addresses. You do not have a router.post handlers for these two routes, so your server ignores these requests.

SEE ALSO: Node.js with Express: how to redirect a POST request

Andy Taton
  • 491
  • 4
  • 8
  • this solution not help friend, i add next code before router.post('/signup', ...) handler and both handler: router.post('/index', (req, res) => { res.render('index'); }); router.post('/signup', passport.authenticate('signup', { successRedirect: '/index', //из passport.use берется signup failureRedirect: '/signup', failureFlash: true })); – Александр Юрьев Aug 18 '18 at 15:51
  • Thanks--could you edit your original question to include this code? – Andy Taton Aug 18 '18 at 15:55
  • Yes, edited, sory, i before router.post('/signup', ...) add router.post('/index'...) – Александр Юрьев Aug 18 '18 at 15:58
  • You would also need a `router.post('/signup')` route to handle failures. If `passport.authenticate` is always failing, that could explain your current behavior. – Andy Taton Aug 18 '18 at 16:05
  • dont understand how i must add handle failures and object with successRedirect etc friend((( can help me with code example on the my code? – Александр Юрьев Aug 18 '18 at 16:14
  • If you also have a .post route to /signup please edit your original question to include this code, so that others can try to help. Thanks! – Andy Taton Aug 18 '18 at 16:41