首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Express.js:用户无法使用

Express.js:用户无法使用
EN

Stack Overflow用户
提问于 2021-08-27 07:37:33
回答 1查看 47关注 0票数 0

我正在使用passport.js和passport-local-mongoose。当尝试登录时什么也没有发生,也没有错误消息。但是,当注册一切正常时,新用户将被添加到数据库中。

我也使用helmet.js实现了一些安全头文件。

代码语言:javascript
复制
app.use(
  helmet.hsts({
    maxAge: 63072000,
    preload: true,
  })
);


app.use(helmet.contentSecurityPolicy({
  directives: {
    connectSrc: ["'self'", 'https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js', 'https://cdn.jsdelivr.net/npm/bootstrap@5.1.0/dist/js/bootstrap.bundle.min.js'],
    defaultSrc: ["'self'", 'https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js', 'https://cdn.jsdelivr.net/npm/bootstrap@5.1.0/dist/js/bootstrap.bundle.min.js'],
    fontSrc: ["'self'"],
    imgSrc: ["'self'", 'data:'],
    scriptSrc: ["'self'", 'https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js', 'https://cdn.jsdelivr.net/npm/bootstrap@5.1.0/dist/js/bootstrap.bundle.min.js'],
    styleSrc: ["'self'",'https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css'],
    frameSrc: ["'self'", 'https://www.instagram.com/', 'https://www.facebook.com/']
  },


  reportOnly: false,

}));

app.use(
  helmet.referrerPolicy({
    policy: ["strict-origin-when-cross-origin"]
  })
);

app.use(helmet.xssFilter());
app.use(helmet.noSniff());
app.use(
  helmet.frameguard({
    action: "deny",
  })
);





app.use(bodyParser.urlencoded({extended: true}));
app.use(bodyParser.json());
app.use(express.static("public"));


app.use(session({
  secret: process.env.COOKIE_SECRET,
  resave: true,
  httpOnly: false,
  saveUninitialized: true,
  cookie:{
    secure: true
  }
}));



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





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

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

我试图在禁用所有标题的情况下登录,但似乎不起作用。

登录的post路径:

代码语言:javascript
复制
app.post("/login", function(req, res){
  User.findOne({username: req.body.username}, function(err, foundUser){
    if(foundUser){
      const user = new User({
        username: req.body.username,
        password: req.body.password
      });
      passport.authenticate("local", function(err, user){
        if(err){
          console.log(err);
        }
        else{
          if(user){
            req.login(user, function(err){
              res.redirect("/favourite");
            });
          } else{
            res.redirect("/login");
          }
        }
      })(req, res);
    } else{
      res.redirect("/login")
    }
  });
});

login.ejs

代码语言:javascript
复制
<form action="/login" method="POST">
            <div class="form-group">
              <label for="email">Email</label>
              <input type="email" class="form-control" name="username">
            </div>
            <div class="form-group">
              <label for="password">Password</label>
              <input type="password" class="form-control" name="password">
            </div>
            <button type="submit" class="my-3 btn btn-dark">Log In</button>
          </form>
EN

回答 1

Stack Overflow用户

发布于 2021-08-27 08:54:44

您是否添加了一些console.log()语句来检查哪个步骤失败了?对我来说,这通常有助于识别代码在哪里停止了预期的工作,并检查数据是否如预期的那样。

我看到你在使用passport.use(User.createStrategy()),这需要passport-local-mongoose插件。您是否在User Mongoose模式中加载了该插件?

PS。前段时间我做了一个使用Passport登录的单文件示例,也许它可以帮助你。它使用的不是Mongoose,而是原生MongoDB驱动程序(https://github.com/allardvanderouw/express-api-passport-local-mongo-session-example/blob/master/server.js)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68949630

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档