Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 本地注册策略不起作用-重定向到故障路径,但无法找出问题所在_Node.js_Express_Passport.js - Fatal编程技术网

Node.js 本地注册策略不起作用-重定向到故障路径,但无法找出问题所在

Node.js 本地注册策略不起作用-重定向到故障路径,但无法找出问题所在,node.js,express,passport.js,Node.js,Express,Passport.js,我正在尝试使用passport设置身份验证,并从我的本地策略开始。然而,由于某种原因,注册失败了,我无法确定我的代码有什么问题。这是我的服务器文件: var express = require('express'), app = express(), bodyParser = require('body-parser'), mongoose

我正在尝试使用passport设置身份验证,并从我的本地策略开始。然而,由于某种原因,注册失败了,我无法确定我的代码有什么问题。这是我的服务器文件:

var express             =       require('express'),
app                     =       express(),
bodyParser              =       require('body-parser'),
mongoose                =       require('mongoose'),
expressSanitizer        =       require('express-sanitizer'),
methodOverride          =       require('method-override'),
passport                =       require('passport'),
flash                   =       require('connect-flash'),
Blog                    =       require('./models/blog'),
Comment                 =       require('./models/comment'),
moment                  =       require('moment'),
session                 =       require('express-session'),
cookieParser            =       require('cookie-parser'),
port                    =       process.env.PORT || 8080;

mongoose.connect('mongodb://localhost/NUFC_blog2');

require('./config/passport')(passport); // pass passport for  configuration

app.use(bodyParser());
app.use(express.static(__dirname + '/public'));
app.use(methodOverride('_method'));
app.use(cookieParser()); // read cookies (needed for auth)

app.set('view engine', 'ejs');

// passport config
app.use(session({ secret: 'toonaresocool'})); // session secret
app.use(passport.initialize());
app.use(passport.session()); // persistent login sessions
app.use(flash()); // messages

// routes
require('./routes.js')(app, passport); // load our routes and pass in our app and fully configured passport

// Listening route
app.listen(port);
console.log('Listening on port ' + port);
这是我的注册路线:

module.exports = function(app, passport) {

// route for home page
app.get('/', function(req, res) {
    res.render('landing.ejs');
});

// show signup form

app.get('/signup', function(req, res) {
res.render('register.ejs', { message: req.flash('signupMessage') });
});

// process user signup

app.post('/signup', passport.authenticate('local-signup', {
successRedirect     :   '/blogs',
failureRedirect     :   '/signup',
failureFlash        :   true
}));
};
当地战略:

var LocalStrategy = require('passport-local').Strategy;

var User = require('../models/user');

module.exports = function(passport) {

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

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

// LOCAL SIGNUP STRATEGY

passport.use('local-signup', new LocalStrategy({
usernameField   :'username', 
passwordField   : 'password',
passReqToCallback: true 
},
function(req, username, password, done) {
// asynchronous
// user.findOne won't work unless data is sent back
process.nextTick(function() {
    // find user whose username is same as on form
    // check to see if the user trying to log in already exists
User.findOne({ 'local.username' : username }, function(err, user){
    // if errors return the error
if(err)
    return done(err);
// check to see if there's a user with that username already
if (user) {
    return done(null, false, req.flash('signupMessage', 'That username is already in use'))
} else {
    // if there is no user with the email
    // create new user
    var newUser     = User();
    newUser.local.username = username;
    newUser.local.password = newUser.generateHash(password);

    // save user
    newUser.save(function(err) {
        if(err)
            throw err;
        return done(null, newUser);
    });
}
});     
});
}));
};
以下是我的用户模型:

var mongoose        =           require('mongoose'),
bcrypt                  =           require('bcrypt-nodejs');

var userSchema = mongoose.Schema({

local           : {
    username    : String, 
    password    : String,
    image       : String,
    email       : String
},
});

userSchema.methods.generateHash = function(password) {
return bcrypt.hashSync(password, bcrypt.genSaltSync(8), null);
};
userSchema.methods.validPassword = function(password) {
return bcrypt.compareSync(password, this.local.password);
};
module.exports = mongoose.model('User', userSchema);
最后是我的报名表!:

<!doctype html>
<html>
<head>
<title>Node Authentication</title>
<link rel="stylesheet"   href="//netdna.bootstrapcdn.com/bootstrap/3.0.2/css/bootstrap.min.css">    <!-- load bootstrap css -->
<link rel="stylesheet" href="//netdna.bootstrapcdn.com/font-awesome/4.0.3/css/font-awesome.min.css"> <!-- load fontawesome -->
<style>
    body        { padding-top:80px; }
</style>
</head>
<body>
<div class="container">

<div class="col-sm-6 col-sm-offset-3">

<h1><span class="fa fa-sign-in"></span> Signup</h1>
<!-- show any messages that come back with authentication -->
<% if (message.length > 0) { %>
    <div class="alert alert-danger"><%= message %></div>
<% } %>

<!-- LOGIN FORM -->
<form action="/signup" method="post">
    <div class="form-group">
        <label>Email</label>
        <input type="text" class="form-control" name="email">
    </div>
    <div class="form-group">
        <label>Password</label>
        <input type="password" class="form-control" name="password">
    </div>

    <button type="submit" class="btn btn-warning btn-lg">Signup</button>
</form>

<hr>

<p>Already have an account? <a href="/login">Login</a></p>
<p>Or go <a href="/">home</a>.</p>

</div>

</div>
</body>
</html>

节点身份验证
正文{padding top:80px;}
报名
0) { %>
电子邮件
密码
报名

已经有账户了吗

或者去


当我尝试注册时,数据库中没有添加任何内容,我只是被重定向回注册,这是我失败的重定向。有什么想法吗?

我在注册中看到的问题。ejs您正在命名电子邮件

将passport.js更改为

passport.use('local-signup', new LocalStrategy({
  usernameField   :'email', 
  passwordField   : 'password',
  passReqToCallback: true 
},

使用调试器,并探索错误。我认为配置中可能存在错误。
passport.use('local-signup', new LocalStrategy({
  usernameField   :'username', 
  passwordField   : 'password',
  passReqToCallback: true 
},
passport.use('local-signup', new LocalStrategy({
  usernameField   :'email', 
  passwordField   : 'password',
  passReqToCallback: true 
},