繁体   English   中英

Node.js中的Passport身份验证

[英]Passport Authentication in Nodejs

以下是我正在处理的代码,但是执行时出现错误。 请帮助我在同一页面上为登录表单和注册表单创建路由。 当我使用此代码提交注册表时,出现错误消息“ Bad request”

var express = require ('express');
var app = express();
var path= require('path');
var bodyParser = require('body-parser');
var mongoose = require("mongoose");
var nodemailer = require('nodemailer');
var transporter = nodemailer.createTransport();
var smtpTransport = require('nodemailer-smtp-transport');
var passport = require('passport');
var LocalStrategy = require('passport-local');
var passportLocalMongoose = require('passport-local-mongoose');
var User = require('./models/user');


app.set('port',  process.env.PORT || 3000);
app.use(bodyParser.json()); // support json encoded bodies
app.use(bodyParser.urlencoded({ extended: true })); // support encoded bodies

app.use(express.static(path.join(__dirname, 'public')));
app.set("view engine", "ejs");
app.use(require('express-session')({
  secret: 'Working on enroll Medicare',
  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());

mongoose.connect("mongodb://localhost/registration");
app.post('/login-register.html', function(req,res)
{
            var username = req.body.usernameregister;
            var email = req.body.emailregister;
            var password1 = req.body.password1register;
            var password2 = req.body.password2register;
        password1, password2: password2}
        User.register(new User({username: username, email: email}), password1, function(err, user){
          if(err){
            console.log(err);
            return res.render('error');
          }
          passport.authenticate('local')(req, res, function(){
              res.redirect("/secret");
          });
        });
});

登录页面

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

我认为您可能在这里遇到多个问题。 这里有几件事要检查:

  • 您有passport.use(new LocalStrategy(User.authenticate())); 我不知道User.authenticate()返回什么,但是它应该返回带有参数function(username, password, done) {...}
  • 您好像使用email作为用户名。 您需要将usernameField添加到策略选项: new LocalStrategy({usernameField: 'email'}, function(email, password, done){...})
  • 我还发现在passport.authenticate函数中使用自定义回调确实很有帮助,以查看返回的错误是否提供有关该问题的更多信息: passport.authenticate('local', function(err, user, info) {console.log(err, user, info)})

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM