在nodejs中通过护照和mysql进行身份验证

时间:2018-04-16 14:05:35

标签: node.js passport.js passport-local

我正在尝试使用护照通过节点开发身份验证组件。我们使用的是关系数据库,即mysql,但是我遇到了问题,无法访问端点并实际验证用户身份。

我有2个文件:

app.js

var passport = require('./passport');

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

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

和passport.js

var LocalStrategy = require('passport-local').Strategy;
var db = require('./db'); //where the db instance is exported

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

// used to deserialize the user
passport.deserializeUser(function (id, done) {
    db.query("select * from user where id = " + id, function (err, rows) {
        done(err, rows[0]);
    });
});
passport.use(new LocalStrategy(
    function (username, password, done) {
        db.query("select * from user where username= " + username, function (err, rows) {
            done(err, rows[0]);
            console.log(rows)
        });
    }
));

根据文档,这是正确的方法,但显然我必须做错了,因为这是我尝试使用用户名和密码对象进行发布请求时得到的错误消息:

  

2:8888 / login:1选项http://localhost:8888/login 404(未找到)   本地主机/

     

:1无法加载http://localhost:8888/login:预检的响应包含无效的HTTP状态代码404.

有什么建议吗?谢谢大家

1 个答案:

答案 0 :(得分:0)

Prima facie,看起来这是cors的问题,因为您的快递应用程序没有提供对预检请求的响应。请安装npm模块cors

npm install --save cors

然后对app.js进行以下更改。

var passport = require('./passport');
//Added lines
var cors = require('cors');
app.use(cors());
//Added lines end
app.use(passport.initialize());
app.use(passport.session());

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

还有其他方法,但我认为这是最简单的方法。