Also ich versuche, eine grundlegende Facebook-Integration mit Loopback und Passport zu tun, die Beispiel-App als Leitfaden: https://github.com/strongloop/loopback-example-passportLoopback Passport-Benutzer ist null
Ich glaube, ich bin fehlt eine kleine Sache, weil die req.user
kommt immer wieder als null zurück, obwohl sich alles andere in einer Reihe zu befinden scheint. Dies führt dazu, dass die ensureLoggedIn(/failedLogin)
jedes Mal zur fehlgeschlagenen Anmeldung führt.
Hier ist mein server.js
:
var loopback = require('loopback');
var boot = require('loopback-boot');
var flash = require('express-flash');
var bodyParser = require('body-parser');
var app = module.exports = loopback();
// Creating a bit of passport
var PassportConfigurator = require('loopback-component-passport').PassportConfigurator;
var passportConfigurator = new PassportConfigurator(app);
// Bootstrap the application, configure models, datasources and middleware.
// Sub-apps like REST API are mounted via boot scripts.
boot(app, __dirname, function(err) {
if (err) {
throw err;
}
});
// Load the provider configurations
var config = {};
try {
config = require('./providers.json');
} catch (err) {
console.error('Please configure your passport strategy in `providers.json`.');
console.error('Copy `providers.json.template` to `providers.json` and replace the clientID/clientSecret values with your own.');
process.exit(1);
}
// to support JSON-encoded bodies
app.middleware('parse', bodyParser.json());
// to support URL-encoded bodies
app.middleware('parse', bodyParser.urlencoded({
extended: true
}));
// The access token is only available after boot
app.middleware('auth', loopback.token({
model: app.models.accessToken
}));
app.middleware('session:before', loopback.cookieParser(app.get('cookieSecret')));
app.middleware('session', loopback.session({
secret: 'kitty',
saveUninitialized: true,
resave: true
}));
// We need flash messages to see passport errors
app.use(flash());
// Initialize passport
passportConfigurator.init();
// Set up related models
passportConfigurator.setupModels({
userModel: app.models.Participant,
userIdentityModel: app.models.userIdentity,
userCredentialModel: app.models.userCredential
});
// Configure passport strategies for third party auth providers
for (var s in config) {
var c = config[s];
c.session = c.session !== false;
passportConfigurator.configureProvider(s, c);
}
app.start = function() {
// start the web server
return app.listen(function() {
app.emit('started');
var baseUrl = app.get('url').replace(/\/$/, '');
console.log('Web server listening at: %s', baseUrl);
if (app.get('loopback-component-explorer')) {
var explorerPath = app.get('loopback-component-explorer').mountPath;
console.log('Browse your REST API at %s%s', baseUrl, explorerPath);
}
});
};
// start the server if `$ node server.js`
if (require.main === module) {
app.start();
}
Und die routes.js
:
var ensureLoggedIn = require('connect-ensure-login').ensureLoggedIn;
module.exports = function(app) {
// Install a "/ping" route that returns "pong"
app.get('/loginFail', function(req, res) {
console.dir(req);
res.send(req.sessionID);
});
app.get('/auth/account', ensureLoggedIn('/loginFail'), function (req, res, next) {
console.log('logged IN!');
console.dir(req);
res.send(req.session);
});
app.get('/auth/logout', function (req, res, next) {
console.log('logging out');
req.logout();
res.redirect('/');
});
};
Durch am erf Objekt suchen, kann ich sehen, dass eine ordnungsgemäße accessToken es gibt und es ein Zugriffstoken passt in meine Datenbank (im Speicher).
Derzeit bekomme ich eine Umleitung auf /auth/account
zu /loginFail
gehen. Die Sitzung ist ziemlich leer, existiert aber. Die Sitzungs-ID existiert ebenfalls.
Jeder Einblick, was ich vermisse?