Passport JS不会出错,但似乎不起作用

时间:2017-02-01 09:32:22

标签: javascript node.js passport.js

我有一个基本的注册和登录应用程序。用户注册并将其信息存储到我的续集模型后,我将页面重定向到登录页面。当我尝试使用我刚刚创建的用户名和密码登录时,它不会抛出任何错误,但页面会进入无休止的加载阶段,最终会显示The localhost page isnt working localhost didn't send any data' ERR_EMPTY_RESPONSE`

//路线

var express = require('express');
var passport = require('passport');
var LocalStrategy = require('passport-local').Strategy;
var router = express.Router();
var db = require('../models');

router.get('/', function(req, res){
    res.redirect('/friend-book');
});

router.get('/friend-book', function(req, res){
    res.render('home');
});

router.get('/friend-book/profile', function(req, res){

    res.render('profile');
});

router.get('/friend-book/login', function(req, res){
    res.render('login');
});

router.get('/friend-book/register', function(req, res){
    res.render('register');
});

router.post('/friend-book/search/user', function(req, res){
    db.users.findAll({
        where: {
            name: req.body.name
        }
    }).then(function(data){
        var userResults = {
            people: data
        }
        res.render('searchedUser', userResults);
    })
});

router.post('/friend-book/register', function(req, res){

    console.log(req.body);

    var name = req.body.name;
    var username = req.body.username;
    var email = req.body.email;
    var password = req.body.password;
    var password2 = req.body.password2;
    var description = req.body.description

    req.checkBody('name', 'Must type in name.').notEmpty();
    req.checkBody('username', 'Must type in Username.').notEmpty();
    req.checkBody('email', 'Must type in email.').notEmpty();
    req.checkBody('email', 'Invalid Email').isEmail();
    req.checkBody('password', 'Must type in password.').notEmpty();
    req.checkBody('password2', 'Passwords do not match.').equals(req.body.password);
    req.checkBody('description', 'Must type in something about yourself.').notEmpty();

    var errors = req.validationErrors();

    //If there are errors, render the errors
    if(errors){
        res.render('register', {
            errors: errors
        });
    }else{
            db.users.create(req.body).then(function(data){
                console.log("register data", data);

                console.log("poop", data.id);
                req.session.user = {
                    id: data.id,
                    name: data.name,
                    username: data.username,
                    email: data.email,
                    description: data.description
                };

                req.flash('success_msg', 'Success! Welcome to Book Face!');

                // res.render("profile", req.session.user);
                res.redirect('/friend-book/login')

            });
    }
//***************************************************************************************************
});


passport.use(new LocalStrategy(
  function(username, password, done) {
    db.users.findOne({ 
        where: {
            username: username
        }
    }, function (err, user) {
      if (err) { return done(err); }
      if (!user) {
        return done(null, false, { message: 'Incorrect username.' });
      }

      if (!user.validPassword(password)) {
        return done(null, false, { message: 'Incorrect password.' });
      }
      return done(null, user);
    });
  }
));

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

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


router.post('/friend-book/login',
  passport.authenticate('local', 
    { 
        successRedirect: '/',
        failureRedirect: '/friend-book/login',
        failureFlash: true 
    }),function(req, res){
        res.redirect('/friend-book/profile' + req.user.username);
  }
);

module.exports = router;

//我的模特

var bcrypt = require('bcryptjs')

module.exports = function(sequelize, DataTypes){
    var users = sequelize.define('users', {
        name: DataTypes.STRING,
        username: DataTypes.STRING,
        password: DataTypes.STRING,
        email: DataTypes.STRING,
        description: DataTypes.STRING
    }, {
        hooks: {
            beforeCreate: function(user, options){
                return new Promise(function(resolve, reject){
                    bcrypt.genSalt(10, function(err, salt) {
                        bcrypt.hash(user.password, salt, function(err, hash) {
                            if (err) {reject(err)}
                            user.password = hash;
                            console.log(user.password);
                            resolve();
                        });
                    });
                })
            }
        }
    });
    return users;
}

//登录把手

<div class="container">

  <form action="/friend-book/login" method="POST" class="form-signin">
    <h2 class="form-signin-heading">Please sign in</h2>
    <label for="inputUsername" class="sr-only">Username</label>
    <input type="text" name="username" id="inputUsername" class="form-control" placeholder="Username" required autofocus>
    <label for="inputPassword" class="sr-only">Password</label>
    <input type="password" name="password" id="inputPassword" class="form-control" placeholder="Password" required>
    <button class="btn btn-lg btn-primary btn-block" type="submit">Sign in</button>
  </form>

</div> <!-- /container -->

//注册把手

<div class="container">
    <h2 class="form-register-heading">Book Face Registration</h2>

    {{#if errors}}
        {{#each errors}}
            <div class="alert alert-warning">{{msg}}</div>
        {{/each}}
    {{/if}}

    <form action="/friend-book/register" method="POST" class="form-signin">
        <div class="form-group">
            <label for="inputName" class="sr-only">Name</label>
            <input type="text" name="name" id="inputName" class="form-control" placeholder="Name">
        </div>
        <div class="form-group">
            <label for="inputUsername" class="sr-only">Username</label>
            <input type="text" name="username" id="inputUsername" class="form-control" placeholder="Username">
        </div>
        <div class="form-group">
            <label for="inputPassword" class="sr-only">Password</label>
            <input type="password" name="password" id="inputPassword" class="form-control" placeholder="Password">
         </div>
         <div class="form-group">
            <label for="inputPassword2" class="sr-only">Password</label>
            <input type="password" name="password2" id="inputPassword2" class="form-control" placeholder="Password">
         </div>
         <div class="form-group">
            <label for="inputEmail" class="sr-only">Email</label>
            <input type="email" name="email" id="inputEmail" class="form-control" placeholder="Email">
         </div>
         <div class="form-group">
            <label for="inputDescription" class="sr-only">Description</label>
            <input type="text" name="description" id="inputDescription" class="form-control" placeholder="Type something">
         </div>
        <button class="btn btn-lg btn-primary btn-block" type="submit">Register</button>
    </form>

</div> <!-- /container -->

1 个答案:

答案 0 :(得分:0)

您只需处理POST的{​​{1}}次请求。

当您使用/friend-book/login时,它会使用res.redirect('/friend-book/login')方法将用户重定向到该网址。

GET