我的护照认证在Heroku上不起作用,未返回用户

时间:2019-09-07 19:08:57

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

我的应用程序和身份验证在本地环境中运行正常,但是将服务器部署到heroku后,由于无法返回用户对象,我无法登录。

这是我的护照档案:

const passport = require('passport');
const localStrategy = require('passport-local').Strategy;
const mongoose = require('mongoose');

const User = mongoose.model('users');

passport.serializeUser((user, done) => {
    // console.log({user})
    done(null, user._id)
})


passport.deserializeUser((id, done) =>
    User.findById(id).then((user) => {
        if (user) {
            done(null, user)
        } else {
        }
    })
);

passport.use(new localStrategy((username, password, done) => {
    // console.log({username}, {password})
    User.findOne({ username: username }, (err, user) => {
        if (err) { return done(err); }

        if (!user) {
            return done(null, false, { message: 'Username not found' });
        }

        if (!user.comparePassword(password, user.password)) {
            return done(null, false, { message: 'Incorrect password.' });
        }
        // console.log('user', user)
        return done(null, user);
    });
}));

路线:

const passport = require('passport');

const mongoose = require('mongoose');

const User = mongoose.model('users');

module.exports = (app) => {
 app.post('/login',
        passport.authenticate('local', {
            successRedirect: '/loginSuccess',
            failureRedirect: '/loginFailed',
        })
    );

    app.get('/loginSuccess', (req, res) => {
        res.send({ success: true, test:'test', user: req.user })
    })
    app.get('/loginFailed', (req, res) => {
        res.send({ success: false, error: "Incorrect credentials" })
    })

};

我不知道它是否有帮助,但是我的索引文件:

const express = require('express');
const mongoose = require('mongoose');
const bodyParser = require('body-parser');
const passport = require('passport');
const cookieSession = require('cookie-session');

const keys = require('./config/keys');

require('./models/user');
require('./services/passport');

mongoose.connect(keys.mongoUri, { useNewUrlParser: true })

const app = express();

app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));

app.use(
    cookieSession({
        maxAge: 30 * 24 + 60 * 60 * 1000, //30 days
        keys: [keys.cookieKey]
    })
);

app.use(function (req, res, next) {
    res.header("Access-Control-Allow-Origin", '*');
    res.header("Access-Control-Allow-Credentials", true);
    res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE,OPTIONS');
    res.header("Access-Control-Allow-Headers", 'Origin,X-Requested-With,Content-Type,Accept,content-type,application/json');
    next();
});

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

//ROUTES
require('./routes/auth')(app);
require('./routes/game')(app);

const PORT = process.env.PORT || 5000;
app.listen(PORT);

登录成功后,我发回包含3个其他对象的对象,即成功bool值,带有用户信息的用户对象,为了进行测试,还测试了包含字符串的对象。

除用户对象外,返回所有内容。可能是什么问题?

0 个答案:

没有答案