Ich arbeite an dem Authentifizierungssystem für eine Knoten-App. Die Anmeldeseite sendet eine AJAX-Anforderung an den Authentifizierungsendpunkt, und der Endpunkt fragt dann unsere Benutzerdatenbank ab, um die Gültigkeit der Anmeldeinformationen zu ermitteln. Wenn der Endpunkt feststellt, dass die Anmeldeinformationen gültig sind, verwende ich die Methode res.cookie()
von Express, um auf der Clientseite ein Cookie zu erstellen, das die Authentifizierungsinformationen für spätere Anforderungen enthält.Warum wird der Set-Cookie-Header nicht gesendet? - Verwenden Restify
Die Authentifizierung funktioniert gut, und die Antwort wird zurück an den Benutzer gesendet, aber wenn ich in den Entwicklertools sehe, sehe ich keine authorization
Cookie, und keine Erwähnung einer Set-Cookie
Header. Was gibt?
Weitere Informationen:
Headers auf die Antwort
restify.CORS.ALLOW_HEADERS.push('Accept-Encoding');
restify.CORS.ALLOW_HEADERS.push('Accept-Language');
restify.CORS.ALLOW_HEADERS.push('authorization');
restify.CORS.ALLOW_HEADERS.push('token');
server.use(restify.CORS({
origins: ['*'],
credentials: true,
headers: ['token']
}));
/* break */
server.opts(/\.*/, function (req, res, next) {
res.header('Access-Control-Allow-Credentials', true);
res.header('Access-Control-Allow-Headers', restify.CORS.ALLOW_HEADERS.join(', '));
res.header('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, OPTIONS');
res.header('Access-Control-Allow-Origin', res.headers.origin);
res.header('Access-Control-Max-Age', 0);
res.header('Content-type', 'text/plain charset=UTF-8');
res.header('Content-length', 0);
res.send(200);
next();
});
Relevante Teil der Authentifizierung api
function authHandler(req, res, next) {
authMan.authenticate(req.params.username,req.params.password).then(function(userdata){
/*d*/console.log('userData:'+userdata);
// jwt library for JSON web tokens
const authorization = jwt.sign(
{'sub': userdata.username, 'roles': authMan.getGroups(userdata)},
// global
authSecret,
{issuer:'myCompany.com'}
);
// Only send the client the user's username and display name
var strippedData = {};
strippedData.username = userdata['username'];
strippedData.displayName = userdata['displayName'];
// Disable https when not in prod
var useHttps = true;
if (process.env[NODE_ENV] === 'dev') {
useHttps = false;
}
res.cookie('authorization', authorization, {
httpOnly: true,
secure: useHttps
});
/*d*/console.log('Sent the request back!');
res.send({
status: 'OK',
userdata: strippedData
});
next();
},function(err){
/*d*/console.log('authHandler error: '+err);
res.status(401).send({
status: 'ERROR',
error: err
});
next();
});
metrics.log(etc);
next();
}
Sie, dass in dem obigen Code sieht, gibt es eine Debug-printf Spruch "Die Anfrage wurde zurückgeschickt!" Während die Antwort an den Server gesendet wird und den richtigen Inhalt enthält, wird diese Anweisung nie in meiner Konsole angezeigt, obwohl sie vor res.send()
erscheint.
Vielen Dank für Ihre Rückkehr. Wenn es Ihr Problem tatsächlich gelöst hat, akzeptieren Sie Ihre eigene Antwort, damit andere wissen, dass es eine Lösung gibt. – HeadCode