После успешной аутентификации паспорта страница не перенаправляется - PullRequest
0 голосов
/ 20 сентября 2018

Хотел бы попросить вас помочь решить проблему с моим кодом, я новичок в веб-разработке с опытом работы всего месяц.Моя проблема в том, что когда моя страница регистрации была успешно аутентифицирована с использованием стратегии passport-local, она не перенаправляется на другую мою страницу.Я уже нашел много предыдущих вопросов здесь, но я не могу найти ответ, который соответствует моей проблеме.Я использовал ajax для публикации и проверки данных в базе данных (монго).Пожалуйста, обратитесь к моему коду ниже.

маршруты:

router.post('/register',[

  check('firstname','First name name must have at least 2 characters')
  .isLength({ min: 2 }),

  check('lastname','Last name must have at least 2 characters')
  .isLength({ min: 2 }),

  check('username','Username name must have at least 2 characters')
  .isLength({ min: 2 }),
   
  check('email')
  .isEmail().withMessage('Please enter a valid email address')
  .trim()
  .normalizeEmail()
  .custom(value => {
    return findUserByEmail(value).then(User => {
          //if user email already exists throw an error
    })
    }),

  check('password')
  .isLength({ min: 8 }).withMessage('Password must be at least 8 chars long')
  .matches(/\d/).withMessage('Password must contain one number')
  .custom((value,{req, loc, path}) => {
    if (value !== req.body.confirmpassword) {
          // throw error if passwords do not match
      throw new Error("Passwords don't match");
    } else {
      return value;
    }
  }),
    
  check('terms','Please accept our terms and conditions').equals('yes'),

  ], function(req, res) {

    const errors = validationResult(req);

    if (!errors.isEmpty()) {     
        
    res.json({status : "error", message : errors.array()});

    } else {


      var document = {
        firstname:    req.body.firstname, 
        lastname:     req.body.lastname,
        email:        req.body.email
        };
      
      var user = new User(document);  

      user.save(function(error){
        console.log(user);

        if(error){ 
          throw error;
        }  
        // res.json({message : "Data saved successfully.", status : "success"});
      });  
    }
    
    next()
    
  }, function(req, res) {

    Account.register(new Account({ username : req.body.username }), req.body.password, function(err, account) {
      if (err) {
        return res.render('register', { account : account });
      }
      // Redirect is not Working Here
      passport.authenticate('local')(req, res, function () {
        res.redirect('/');
      });
    });

});

AJAX Сообщение:

$(function(){

  $("#msgDiv").hide();

  $("#btnSignup").on('click', function(event){
    event.preventDefault();

    var firstname        = $("#RegisterFormFirstName").val();
    var lastname         = $("#RegisterFormLastName").val();
    var username         = $("#RegisterFormUsername").val();
    var email            = $("#RegisterFormEmail").val();
    var password         = $("#RegisterFormPassword").val();
    var confirmpassword  = $("#RegisterFormConfirmPassword").val();
    var terms            = $('input[name="terms"]:checked').val();


    $.ajax({
      url: "/users/register",
      method: "POST",
      data: { firstname: firstname, lastname: lastname, username: username, email: email, password: password, confirmpassword: confirmpassword, terms: terms }

      }).done(function( data ) {

        if ( data ) {
          if(data.status == 'error'){

            var errors = '<ul>';
            $.each( data.message, function( key, value ) {
              errors = errors +'<li>'+value.msg+'</li>';
              });

            errors = errors+ '</ul>';
            $("#msgDiv").removeClass('alert-success').addClass('alert-danger');
            $("#msgDiv").html(errors).show();
          }else{
            //$("#msgDiv").removeClass('alert-danger').addClass('alert-success').html(data.message).show(); 
          }
        }
      }); 

  });
});

Кстати, я использую Node-Express.Заранее благодарю за помощь.

...