简体   繁体   English

Node.js中的Passport身份验证

[英]Passport Authentication in Nodejs

Below is the Code that i'm working on but i'm getting errors while executing. 以下是我正在处理的代码,但是执行时出现错误。 Please help me in creating routes for both login and register forms which are on the same page. 请帮助我在同一页面上为登录表单和注册表单创建路由。 When I'm submitting the registration form with this code, I'm getting an error which says "Bad request" 当我使用此代码提交注册表时,出现错误消息“ 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");
          });
        });
});

login page 登录页面

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

I think you may have multiple problems here. 我认为您可能在这里遇到多个问题。 Here are a few things to check: 这里有几件事要检查:

  • You have passport.use(new LocalStrategy(User.authenticate())); 您有passport.use(new LocalStrategy(User.authenticate())); . I don't know what User.authenticate() returns, but it should return a function with the arguments function(username, password, done) {...} 我不知道User.authenticate()返回什么,但是它应该返回带有参数function(username, password, done) {...}
  • It looks like you're using email as the username. 您好像使用email作为用户名。 You need to add usernameField to the strategy options: new LocalStrategy({usernameField: 'email'}, function(email, password, done){...}) 您需要将usernameField添加到策略选项: new LocalStrategy({usernameField: 'email'}, function(email, password, done){...})
  • I've also found it really helpful to use a custom callback in the passport.authenticate function to see if the returned error provides any more information about the problem: passport.authenticate('local', function(err, user, info) {console.log(err, user, info)}) 我还发现在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