私はSails.jsを使用しており、セッションにユーザー情報を保存して簡単なログインをしようとしています。ここでは、ログインアクションのための私のコードは次のとおりです。Sails.jsセッションが最初のリクエスト時に保存されない
AuthService.login(req.body.email, req.body.password).then(user => {
// save user information in the session
req.session.user = user;
req.session.authenticated = true;
return res.json({
user:user,
token:token
});
}).catch(err => {
sails.log.error(err);
res.json(403, {
callstack: err.callstack,
error: 'Authentication error',
reason : err.reason
});
});
これは、他のページ(ログイン後)のための私のポリシーです:
module.exports = function(req, res, next) {
// User is allowed, proceed to the next policy,
if (req.session.authenticated && req.session.user) {
return next();
}
// User is not allowed
return res.forbidden('You are not permitted to perform this action. (Authenticated)');
};
問題は、セッションデータを最初にするために保存されていないということですリクエストは、私が最初に成功したログインの後を禁止されている403の意味を取得しています。その結果、セッションデータが表示されるようにログアウトして再度ログインする必要があります。
ではなく、(認証ポリシー付き)のログインに制限されていますが、ポリシーの有無にかかわらずセッションデータを必要とするアクションにも適用されます。また、サーバーが初めて起動するときだけでなく、新しいセッションごとに発生します。
私はので、私はまた、次のように設定/ session.jsを変更することで、セッションストアとしてのRedisで動作するようにSail.jsを設定しようとした問題は、メモリのセッションを使用したためであったと思った:
adapter: 'redis',
// host: 'localhost',
// port: 6379,
// ttl: 60*60*20,
// db: 0,
// prefix: 'sess:',
私は、アダプタの行をコメント解除し、オプションのRedisの接続パラメータととせずに試してみましたが、その後req.sessionは、私は、接続-Mongoのアダプタを使用してい
わからない何が起こっているかを私はこのような問題を経験したことはありません。しかし、セッション情報をJWTトークンに入れないのはなぜですか?私が見ることができるように、トークンロジックを使用しています... – hlozancic
回避策があり、単にJWTトークンに入れても、それはやや帆の目的を敗北させると思います... – Aaron
私はあなたに競争条件があると思います2つのクッキーが同じセッションに設定されています。おそらくフロントエンドのローディングスピナーにアイコン用のウェブフォントを読み込んでいたり、ログインして「送信」をクリックしたときに動的に読み込まれる画像のような他の資産がある場合は、 -loaded _ユーザーはログインフォームを送信する前に – sgress454