In meinem AuthController.js ich überprüfen, ob Login sucessful ist und legen Sie einen Hash-Code in der Sitzung:Passport.js Sitzungen festgelegt sind nicht, wenn Anmeldung mit Android
req.logIn(user, function (err) {
if (err) res.send(err);
var redirectTo = req.session.redirectTo ? req.session.redirectTo : '/user/show/'+user.id;
delete req.session.redirectTo;
bcrypt.genSalt(10, function (err, salt) {
bcrypt.hash(user.email, salt, function (err, hash) {
if (err) {
console.log(err);
} else {
req.session.passport.user_type = user.type;
req.session.passport.user_avatar = user.avatar;
req.session.passport.email = user.email;
req.session.passport.token = hash;
// here session is set! also when login with Android
console.log("User passport Sessions: ",req.session.passport)
res.json(user);
res.end();
}
});
})
})
Die Sessions gesetzt werden, wenn ich mit einem Browser anmelden - ich überprüfe sie mit ein anderen einfachen Controller:
'who': function (req, res) {
res.json(req.session);
},
als ich mit meiner Android-App (Volley Request) aller Arbeit anmelden, wie erwartet, aber als ich dann nach der erfolgreichen Anmeldung eine neue Anfrage an diesem ‚wer‘ Controller machen Das gesamte 'Pass' Attribut ist null.
Warum ist die Passsitzung nicht festgelegt, wenn ich mich mit der Android App anmelde?
Die Frage ist: Sind Volley Anforderungen anders als Browser Anfragen? Wenn der Server die Sitzung nicht für Volley-Anfragen speichern kann, wie weiß ich auf dem Server (bei der zweiten Anfrage), dass der Benutzer bereits angemeldet ist?
ich die req.headers Dump, ist dies, wie Chrome aussieht:
{ host: 'localhost:1337',
connection: 'keep-alive',
'cache-control': 'max-age=0',
'upgrade-insecure-requests': '1',
'user-agent': 'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36',
accept: 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
'accept-encoding': 'gzip, deflate, sdch',
'accept-language': 'de-DE,de;q=0.8,en-US;q=0.6,en;q=0.4',
cookie: '__utma=111872281.1508283337.1455636609.1455636609.1455636609.1; __utmz=111872281.1455636609.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); _ga=GA1.1.1508283337.1455636609; sails.sid=s%3AHNW3D3ktwA79IFHH4gX9Ko6o73MZOjRK.I7sTYkCKSkkwset6OC2ap58fcROPtV6PqUnkaInGW44',
'if-none-match': 'W/"1f3e-WoreHgYUy3uvXGNH++ttsQ"' }
Und das ist, wie Android Anfrage über Volley wie folgt aussieht:
{ 'user-agent': 'Dalvik/2.1.0 (Linux; U; Android 6.0; Android SDK built for x86 Build/MASTER)',
host: '10.0.2.2:1337',
connection: 'Keep-Alive',
'accept-encoding': 'gzip' }
{ 'if-none-match': 'W/"1f3e-WoreHgYUy3uvXGNH++ttsQ"',
'user-agent': 'Dalvik/2.1.0 (Linux; U; Android 6.0; Android SDK built for x86 Build/MASTER)',
host: '10.0.2.2:1337',
connection: 'Keep-Alive',
'accept-encoding': 'gzip' }
Der Sitzungs Teil fehlt - mittlerweile Ich weiß, dass Sie das Session-Management selbst implementieren müssen. Gibt es ein einfaches Tutorial für mehrere HTTP-Anfragen über Volley mit Sitzungen?
Ich wieder, 1,5 Monate später: Verwenden Sie RETROFIT! Retrofit ist wie 1000 Mal einfacher und besser - ich wünschte, ich wüsste es https://futurestud.io/tutorials/retrofit-add-custom-request-header – Suisse