0
パスポートを持つノードを使用していますが、「LocalStrategy」でログイン処理を実行しようとしています。req.isAuthenticatedは、angle2のアプリケーションでobservableを使用すると常にfalseを返します
RESTクライアントを使用してログイン要求を実行し、別のRESTパスを要求してデータを抽出する場合、req.isAuthenticated()は期待どおりにtrueを返します。
私がangular2アプリケーションでそうしているときは、常にfalseです。ここ
はserver.jsのコードである:
var express = require('express');
var session = require('express-session');
var app = express();
var passport = require('passport');
var bodyParser = require('body-parser');
app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());
app.use(session({
secret: 'secret',
saveUninitialized: true,
resave: true
}));
app.use(passport.initialize());
app.use(passport.session());
var sections = require('./sections/routes/sections');
var users = require('./users/routes/users');
app.use('/api/v1/sections', sections);
app.use('/api/v1/users', users);
app.listen(9090, function() {
console.log('Example app listening on port 9090')
});
Users.js:
var express = require('express');
var router = express.Router();
var passport = require('passport');
var LocalStrategy = require('passport-local').Strategy;
var User = require('../models/users');
passport.use(new LocalStrategy({
usernameField: 'email',
passwordField: 'password'
},
function(email, password, done) {
User.findOne({ $or: [ { userName: email },{ email: email} ] }, function(err, user) {
if (err) { return done(err); }
if (!user) {
return done(null, false, { message: 'Incorrect username.' });
}
if (!User.verifyPassword(user.password,password)) {
return done(null, false, { message: 'Incorrect password.' });
}
console.log('User found: ' + user);
return done(null, user);
});
}
));
passport.serializeUser(function(user, done) {
console.log('serialize user id: ' + user.id);
done(null, user._id);
});
passport.deserializeUser(function(id, done) {
console.log('deserialize user id: ' + id);
User.findById(id, function (err, user) {
if (err){
console.error('User not found. ' + err);
}
done(err, user);
});
});
router.post('/login', passport.authenticate('local'),function (req, res) {
console.log('User authenticated');
res.status(200).json({result: {}});
});
module.exports = router;
Sections.js:
var express = require('express');
var router = express.Router();
var Sections = require('../models/sections');
router.get('/', function (req, res,next) {
if (!req.isAuthenticated()) { // Works with REST client only!
res.status(401).json({result: 'UnAuthorized'});
} else {
console.log('User ' + req.user + " isAuth: " + req.isAuthenticated());
Sections.findOne({userName: req.user.userName}, function (err, sections) {
if (err) {
// return done(err);
res.status(500).json({result: err});
} else if (!sections) {
// return done(null, false, { message: 'Incorrect username.' });
res.status(200).json({result: {}});
} else {
// return done(null, sections);
res.status(200).json({result: sections});
}
});
}
// next();
});
module.exports = router;
Login.component.ts:
this._loginServer.login(user).subscribe(() => {
console.log('Login passed'); // Get's here
this._router.navigate(['sections']); // Get's 401 from server :(
},
error => {
console.log('Login failed');
});