2016-10-19 13 views
0

を使用して、私は、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()の前に表示されていても、このステートメントはコンソールに表示されません。

答えて

0

私の同僚の調査と助けを受けた後、問題はres.cookie()が定義されていないことでした。私は何とか私の頭にrestify.js、私たちが使用しているサーバは、express.jsのスーパーセットでした。そうではない!私が使ったはずの機能はres.setCookie()です。

+0

それを投稿するために戻って来ていただきありがとうございます。それが本当にあなたの問題を解決した場合は、あなた自身の答えを受け入れるように、他の人は解決策があることを知っているでしょう。 – HeadCode

関連する問題