Node.js Passport LocalStrategy логин замораживается, если пользователь и логин верны - PullRequest
0 голосов
/ 26 октября 2018

По курсу https://ide.c9.io/learnwithcolt/webdevbootcamp

Аутентификация - папка AuthDemo

Мой код:

var express               = require("express"),
    mongoose              = require("mongoose"),
    passport              = require("passport"),
    bodyParser            = require("body-parser"),
    LocalStrategy         = require("passport-local"),
    passportLocalMongoose = require("passport-local-mongoose"),
    User                  = require("./models/user")

mongoose.connect("mongodb://localhost/auth_demo_app");

var app = express();
app.set('view engine', 'ejs');
app.use(bodyParser.urlencoded({extended: true}));

app.use(require("express-session")({
    secret: "This is my secret sentence",
    resave: false,
    saveUninitialized: false
}));
app.use(passport.initialize());
app.use(passport.session());

passport.use(new LocalStrategy(User.authenticate()));
passport.serializeUser(User.serializeUser());
passport.deserializeUser(User.deserializeUser());


//=========
// ROUTES
//=========

app.get("/", function(req, res){
    res.render("home");
});

app.get("/secret", function(req, res){
    res.render("secret");
})

//AUTH ROUTES
//show signup form
app.get("/register", function(req, res){
   res.render("register") ;
});

//handling user sign up
app.post("/register", function(req, res){
    req.body.username
    req.body.password
    User.register(new User({username:  req.body.username}), req.body.password, function(err, user){
        if(err){
            console.log(err);
            return res.render("register");
        }
        passport.authenticate("local")(req, res, function(){
            res.render("./secret");
        });
    });

});


//LOGIN ROUTES
//render login form
app.get("/login", function(req, res) {
   res.render("login");
}),

//login logic
//middleware
app.post("/login", passport.authenticate("local", {
    succesRedirect: "./secret",
    failureRedirect: "/login"
    }), function(req, res){
});




app.listen(process.env.PORT, process.env.IP, function() {
    console.log("The AuthDemo Server has started!");
});

Маршруты входа в систему работают нормально, если имя пользователя +неверный пароль, приложение перенаправляет заново к форме входа.

Но если имя пользователя + пароль в порядке, браузер останавливается и продолжает говорить «Ожидание», пока не отобразится этот код:

<html>
  <head>
    <meta charset='utf-8'> 
    <title>Error 502 - Bad Gateway</title>
    <link rel="stylesheet" type="text/css" href="https://cdn.c9.io/errors/style.css" />
    <style type="text/css">
    .error_content {
        background: rgba(255, 255, 255, 0.23);
        padding: 10px;
        width: 641px;
        margin: 25px 0;
        display: none;
    }

    #error-msg {
        display: block;
    }
    </style>
  </head>
  <body class="errorUnknown light">
    <div id="wrapper">
      <h1>Error 502 - Bad Gateway</h1>
      <div class="error_content" id="error-msg">
          <p>Please click <a href="javascript:location.reload(true)">here</a> to try again, if the issue persists please contact <a href="https://c9.io/support">support</a></p>
      </div>

      <a href="http://status.c9.io">Status Page</a> |
      <a href="https://c9.io/support">Support</a> |
      <a href="https://c9.io/dashboard.html">Dashboard</a> |
      <a href="https://c9.io">Home</a>
    </div>
  </body>
</html>

Может, оригинал кода устарел?Или мне нужно использовать конкретную версию паспорта?

Модель пользователя

var mongoose = require("mongoose");
var passportLocalMongoose = require("passport-local-mongoose")

var UserSchema = new mongoose.Schema({
   username: String,
   password: String
});

UserSchema.plugin(passportLocalMongoose);

module.exports = mongoose.model("User", UserSchema);

Ответы [ 2 ]

0 голосов
/ 26 октября 2018

Это выглядит для меня просто опечаткой, если вы не скопировали свой код неправильно:

app.post("/login", passport.authenticate("local", {
    succesRedirect: "./secret",
    failureRedirect: "/login"
    }), function(req, res){
});

Обратите внимание, что в "successRedirect" отсутствует 's'.

0 голосов
/ 26 октября 2018

Пожалуйста, сравните мою модель user.js с вашей собственной.

Вот код:

var mongoose = require('mongoose');
var bcrypt = require('bcryptjs');

// User Schema
var UserSchema = mongoose.Schema({
	username: {
		type: String,
		index:true
	},
	password: {
		type: String
	},
	email: {
		type: String
	},
	name: {
		type: String
	}
});

var User = module.exports = mongoose.model('User', UserSchema);

module.exports.createUser = function(newUser, callback){
	bcrypt.genSalt(10, function(err, salt) {
	    bcrypt.hash(newUser.password, salt, function(err, hash) {
	        newUser.password = hash;
	        newUser.save(callback);
	    });
	});
}

module.exports.getUserByUsername = function(username, callback){
	var query = {username: username};
	User.findOne(query, callback);
}

module.exports.getUserById = function(id, callback){
	User.findById(id, callback);
}

module.exports.comparePassword = function(candidatePassword, hash, callback){
	bcrypt.compare(candidatePassword, hash, function(err, isMatch) {
    	if(err) throw err;
    	callback(null, isMatch);
	});
}

Если хотите, я могу загрузить полный код со всеми файлами для Node.js Passport Login System.Просто дай мне знать

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...