【问题标题】:passport authentication always fails护照认证总是失败
【发布时间】:2018-03-16 05:16:55
【问题描述】:

我正在尝试使用 express 框架、mongodb 和护照设置一个简单的登录页面以进行身份​​验证。 我的身份验证总是进入失败状态。我哪里错了?

我的服务器.js:

var express = require("express");
var app = express();
var bodyParser = require('body-parser');
var cors = require('cors');
const passport = require('passport');
const LocalStrategy = require('passport-local').Strategy;
//var router = express.Router();
var path = require('path');
var mongoose = require('mongoose');
var User = require('./model');
app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());
app.use(cors());





app.use(passport.initialize());
app.use(passport.session());


passport.use(new LocalStrategy(
  function(username, password, done) {

      users.findOne({
         username : 'username'
      }, function(err, user) {

        if (err) {
          return done(err);
        }

        if (!user) {
          return done(null, false); 
        }

        if (user.password != password) {
          return done(null, false);
        }
        return done(null, user);
      });
  }
));

app.post('/login',
  passport.authenticate('local', { failureRedirect: '/error' }),
  function(req, res) {
    res.redirect('/success?username='+req.user.username);
});




//app.use("/",router);

//app.use(bodyParser());
app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());
app.use(cors());




app.get('/success', (req, res) => res.send("Welcome "+req.query.username+"!!"));
app.get('/error', (req, res) => res.send("error logging in"));//ALWAYS LAND HERE 

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

/*passport.deserializeUser(function(id, cb) {
  User.findById(id, function(err, user) {
    cb(err, user);
  });
});
*/










//app engine
app.set('view engine', 'ejs');
app.set('views', path.join(__dirname, 'views'));


mongoose.connect('mongodb://localhost:27017/UserSchema');

/*
router.use(function (req,res,next) {
  console.log("/" + req.method);
  next();
});*/

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

app.post("/user",function (req, res) {
    var u = new User();
     //console.log(req.body);
    u.email = req.body.email;
    u.name = req.body.name;
    u.password = req.body.password;
    //p.photo = req.body.photo;
    u.save(function (err) {
        if (err) {
            res.send(err);
        }
        res.render('login');
});

});


app.get("/login",function (req, res) {
    res.render('login');

});




app.get("/all",function (req, res) {
    User.find(function (err, products) {
        if (err) {
            res.send(err);
        }
        res.send(products);
    });
});

/*
router.get("/about",function(req,res){
  res.sendFile(path + "about.html");
});

router.get("/contact",function(req,res){
  res.sendFile(path + "contact.html");
});


app.use("*",function(req,res){
  res.sendFile(path + "404.html");
});
*/












app.listen(3000,function(){
  console.log("Live at Port 3000");
});

对垃圾cmets感到抱歉

这是我的猫鼬模式(model.js):

var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var UserSchema = new Schema({
    email: String,
    name: String,
    password: String,
    //photo: String,
});
module.exports = mongoose.model('User', UserSchema);

我的 login.ejs :

<!DOCTYPE html>
<html>
<<title>Login</title>
<body>


<form action="/login", method="post">
  Email:<br>
  <input type="text" name="username">
  <br>
  Password:
  <br>
  <input type="text" name="password">
  <br><br>
  <input type="submit" value="Submit">
</form> 


</body>
</html>

还有我的注册页面,可以注册并插入db:

<!DOCTYPE html>
<html>
<body>

<form action="/user", method="post">
  Email:<br>
  <input type="text" name="email">
  <br>
  Name:<br>
  <input type="text" name="name" >
  <br>
  Password:
  <br>
  <input type="text" name="password">
  <br><br>
  <input type="submit" value="Submit">
</form> 

<a href="/login"/><input  type="submit" value="Login">
</body>
</html>

【问题讨论】:

  • 你的 findOne 函数总是试图用用户名 - username 查找用户。请改写username: username(不带引号)。如果这不是问题,请尝试控制台记录不同的内容并检查您哪里出错了

标签: node.js mongodb express passport.js


【解决方案1】:

您将 MongoDB User 模型导入为:

var User = require('./model');

但是,您在 "users"

上调用 .findOne() 方法
passport.use(new LocalStrategy(
  function(username, password, done) {

      users.findOne({
         username : 'username'
      }, function(err, user) {

不应该是User.findOne()

如果这不能解决问题,那么您应该详细说明“我的应用程序总是进入失败状态”的意思。

【讨论】:

  • 护照总是失败重定向
猜你喜欢
  • 1970-01-01
  • 2012-09-22
  • 2017-09-27
  • 1970-01-01
  • 2013-06-09
  • 2013-05-27
  • 1970-01-01
  • 2021-04-16
  • 1970-01-01
相关资源
最近更新 更多