Node.js 我无法使用passport facebook验证routes express
大家下午好。 几天前,我尝试使用express和passport facebook验证路线,但没有成功。在客户端上,我使用VueJs。 如果有人能在这个问题上帮助我,我将非常高兴。 我将在下面发布我的代码:Node.js 我无法使用passport facebook验证routes express,node.js,authentication,passport.js,vue.js,passport-facebook,Node.js,Authentication,Passport.js,Vue.js,Passport Facebook,大家下午好。 几天前,我尝试使用express和passport facebook验证路线,但没有成功。在客户端上,我使用VueJs。 如果有人能在这个问题上帮助我,我将非常高兴。 我将在下面发布我的代码: express.js 'use strict'; let express = require('express'); let bodyParser = require('body-parser'); let cors = require('cors'); let cookieParser
express.js
'use strict';
let express = require('express');
let bodyParser = require('body-parser');
let cors = require('cors');
let cookieParser = require('cookie-parser');
let session = require('express-session');
let passport = require('passport');
let load = require('express-load');
module.exports = () => {
let app = express();
//configurar a porta em que o express irá rodar
app.set('port', 3000, "127.0.0.1");
//configura como os dados são transitados entres servidor e cliente
app.use(bodyParser.urlencoded({extended: true}));
app.use(bodyParser.json());
app.use(require('method-override')());
app.use('*', cors());
app.use(cookieParser());
app.use(session({
secret: 'ilovenodejs',
resave: true,
saveUninitialized: true
}));
app.use(passport.initialize());
app.use(passport.session());
load('models', {cwd: 'app'})
.then('controllers')
.then('routes')
.into(app);
return app;
}
文件passport.js
'use strict';
var passport = require('passport');
var FacebookStrategy = require('passport-facebook').Strategy;
var mongoose = require('mongoose');
var configAuth = require('./auth');
module.exports = () => {
var Usuario = mongoose.model('Usuario');
passport.use(new FacebookStrategy({
clientID: configAuth.facebookAuth.clientID,
clientSecret: configAuth.facebookAuth.clientSecret,
callbackURL: configAuth.facebookAuth.callbackURL
},
function (accessToken, refreshToken, profile, done) {
//console.log('profile: ', profile);
process.nextTick(() => {
Usuario.findOne({'facebook.id': profile.id}, (err, usuario) => {
if (err) return done(err);
if (usuario) {
//console.log('user: ', user);
return done(null, usuario);
} else {
var usuario = new Usuario();
usuario.facebook.id = profile.id;
usuario.facebook.token = accessToken;
usuario.facebook.name = profile.displayName;
usuario.facebook.email = 'email';
usuario.save((err) => {
if (err) throw err;
return done(null, usuario);
});
}
});
});
}
));
passport.serializeUser(function(usuario, done){
console.log('serialize', usuario._id);
done(null, usuario._id);
});
passport.deserializeUser(function(id, done){
console.log('deserialize', id);
Usuario.findById(id).exec()
.then(function(usuario){
console.log('deserialize', usuario);
done(null, usuario);
});
});
}
路线护照:
'use strict';
//let cors = require('cors');
let passport = require('passport');
module.exports = (app) => {
let controller = app.controllers.usuarios;
let Usuario = app.models.usuario;
let temp = '';
let objetoUsuario = {}
//app.use(cors());
app.route('/api/usuarios')
.get(controller.listaUsuarios)
.post(controller.salvaUsuario);
app.get('/auth/facebook', passport.authenticate('facebook'),
function (req, res) { });
app.get('/auth/facebook/callback',
passport.authenticate('facebook', { failureRedirect: '/' }),
function (req, res) {
temp = req.session.passport;
console.log(req.session.passport);
req.session.save(() => {
req.user = req.session.passport
res.redirect('http://localhost:8080/#!/home');
});
});
app.get('/v1/success', (req, res) => {
Usuario.findById(temp.user).exec()
.then((usuario) => {
if (!usuario) throw new error('Usuario não encontrado');
res.json(usuario);
req.session.passport.user = usuario
}, (err) => {
res.status(404).json(err);
});
//console.log(req.session.passport);
});
app.get('/logout', (req, res) => {
req.logout();
res.redirect('http://localhost:8080/#!/home');
});
}
这部分内容将重定向到我的vuejs客户端
部分身份验证路由:
'use strict';
function verificaAutenticacao(req, res, next){
console.log(req.user);
console.log(req.session);
if(req.isAuthenticated()){
return next();
}else{
res.status('401').json('não autorizado');
}
};
module.exports = (app) => {
let controller = app.controllers.viagens;
app.route('/api/viagens')
.post(verificaAutenticacao, controller.salvaViagem);
}
日志端口控制台。passeport会话为空,不知道原因
Session {
cookie:
{ path: '/',
_expires: null,
originalMaxAge: null,
httpOnly: true },
passport: {} }
我知道我做错了什么,但不知道这是我的错误。
用户身份验证是正常完成的,如果我执行console.log(req.session.passport),会话中会有用户的id,但是当我去验证session.passport时,这是空的,现在我不知道该怎么办。
如果有人能帮我。
多谢各位