私はログインリクエストに対して200の応答を得ましたが、deserializeUserは決して呼び出されなかったので、それ以上の認証チェック要求に対しては401があります。私はパスポートのソースに分割し、パスポートがreq._passport.session.userが存在するかどうかをチェックし、そうでない場合はdeserializeUserを呼び出さないことに気付きました。パスポートdeserializeUserメソッドが呼び出されなかった
私はstackoverflowに関する他の質問を検索しましたが、私は特定のケースがあるようです。フロントエンド、http://localhost:3000バックエンド)私はbodyParse、cookieParser、急行セッションを使用
、パスポートを初期化し、パスポートセッション -
は、単一のローカル戦略の認証タイプがありますが、私は、CORS設定が設定されたログイン要求を行うために、http://localhost:8080は、Ajaxリクエストを使用します。 Expressセッションのセキュリティ:httpを介して認証リクエストを実行するとfalseが設定されます。
ここで私のプロジェクトを見つけることができます(バックエンドpackage.jsonは使えますので、それを使うことができます、フロントエンドは分かりません)。少なくとも、そこのコードをチェックできます。
バックエンドhttps://github.com/rantiev/template-api フロントエンドhttps://github.com/rantiev/template-angular
Expressセッションの設定とCORSは
var passport = require('passport');
var LocalStrategy = require('passport-local').Strategy;
var rememberMe = require('../../modules/rememberMe');
var createAccessToken = require('../../modules/createAccessToken');
var bcrypt = require('bcrypt-nodejs');
var UserM = require('../users/userM');
module.exports = function (app, mainRouter, role) {
passport.use(new LocalStrategy({
usernameField: 'email',
passwordField: 'password'
}, function (username, password, done) {
UserM.findOneQ({email: username})
.then(function(user){
if (user && bcrypt.compareSync(password, user.password)) {
done(null, user);
} else {
done(null, false);
}
})
.catch(function(err){
done(err);
});
}));
passport.serializeUser(function (user, done) {
console.log('serialize');
if (user) {
createAccessToken(user, done);
} else {
done(null, false);
}
});
passport.deserializeUser(function (token, done) {
console.log('deserialize');
UserM.findOneQ({accessToken: token})
.then(function(user){
if (user) {
done(null, user);
} else {
done(null, false);
}
})
.catch(function(err){
done(err);
});
});
app.use(passport.initialize());
app.use(passport.session());
mainRouter.post('/me', passport.authenticate('local'), function (req, res) {
res.status(200).send();
});
mainRouter.get('/logout', function (req, res) {
req.logout();
res.redirect('/');
});
mainRouter.get('/me', function (req, res) {
if (!req.user) {
res.status(401).send('Please Login!');
return;
}
var currentUser = {
id: req.user._id,
role: req.user.role
};
res.status(200).json(currentUser);
});
};
私は同じ問題を抱えていますが、これを解決しましたか? – Jeffpowrs
いいえ、解決策があるときはここで答えてくれます。タイムアウトを与えました。私はこれまでにできたことはすべてできましたが、うまくいきませんでした) – Rantiev
ログイン要求は、後続のリクエストで返されたCookieを設定していると思われ、そのCookieには発行したアクセストークンがあります。 –