を使用して、私は、Nodeアプリのための認証システムに取り組んでいます。ログイン・ページはAJAX要求を認証エンドポイントに送信し、エンドポイントはユーザー・データベースに照会して信任状の妥当性を判断します。エンドポイントが資格情報が有効であると判断した場合は、Expressのres.cookie()
メソッドを使用して、クライアント側に後で要求する認証情報を含むCookieを作成します。Set-Cookieヘッダーが送信されないのはなぜですか? - Restify
認証が正常に機能していて、ユーザーに応答が返ってきていますが、開発ツールを見ると、authorization
のクッキーはなく、Set-Cookie
ヘッダーは表示されません。何がありますか?
詳しい情報:あなたは上記のコードでは、と言ってデバッグのprintfがあることに注意しましょう応答に
ヘッダ認証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();
}
の
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();
});
関連する部分"リクエストを送り返しました!"応答はサーバーに返送され、正しい内容が含まれていますが、res.send()
の前に表示されていても、このステートメントはコンソールに表示されません。
それを投稿するために戻って来ていただきありがとうございます。それが本当にあなたの問題を解決した場合は、あなた自身の答えを受け入れるように、他の人は解決策があることを知っているでしょう。 – HeadCode