Passport.jsを使用してNode-Appへのログインを実現しています。しかし、私のアプリでは、ユーザーのIDにアクセスする必要があり、現在、これを実現する方法がわかりません。
ユーザーIDにアクセスするにはどうすればよいですか、それとも自分でCookieで送信する必要がありますか?
戦略の構成の横にあるアプリに次のコードを導入する必要があります。
passport.serializeUser(function(user, done) {
done(null, user.id);
});
passport.deserializeUser(function(obj, done) {
done(null, obj);
});
このように、認証されたユーザーでdone
関数を呼び出すと、passportがuserIdをCookieに保存します。 userIdにアクセスするときはいつでも、リクエストの本文で見つけることができます。 (エクスプレスreq["user"]
)。
セッションに他のデータを格納する場合は、serializeUser
関数を開発することもできます。私はそれをこのようにします:
passport.serializeUser(function(user, done) {
done(null, {
id: user["id"],
userName: user["userName"],
email: user["email"]
});
});
詳細については、こちらをご覧ください: http://passportjs.org/docs/configure
サインインパスに追加
res.cookie('userid', user.id, { maxAge: 2592000000 }); // Expires in one month
サインアウトパスに追加
res.clearCookie('userid');
angular-fullstack
generatorを使用している場合、これは、ユーザーCookie(後でAngularJSで取得できます)で_id
を取得するようにsetUserCookie
を変更した方法です。
setUserCookie: function(req, res, next) {
if (req.user) {
req.user.userInfo['_id'] = req.user._id;
console.log('Cookie', req.user.userInfo);
// Splice in _id in cookie
var userObjWithID = {
"provider": req.user.userInfo.provider,
"role": req.user.userInfo.role,
"name": req.user.userInfo.name,
"_id": req.user._id
};
res.cookie('user', JSON.stringify(userObjWithID));
}
next();
}
または、次のようにすることもできます。
passport.serializeUser(User.serializeUser());
passport.deserializeUser(User.deserializeUser());
app.use((req, res, next) => {
res.locals.login = req.isAuthenticated();
res.locals.thisUser = req.user;
next();
});