これは少し新しくなっています。 Node.jsとExpress.jsでREST APIを作成しました。一部のルートには認証ミドルウェアがあります。これらのルートを使用するには、検証されるユーザーの認証トークンを使用してヘッダーを設定する必要があります。私は、ローカルストレージを使用している静的サイトでこれを問題なく実行してきました。私は最初の動的サイトを(エクスプレスを使用して)作成しています。特定のルートでは、ページを表示するために必要なすべてのデータをロードするミドルウェアがあります。ローカルストレージのヘルプがないので、認証トークンにアクセスして使用するにはどうすればよいですか?Expressミドルウェアでの認証
EDIT(説明のため): これは、データベース(mongoDB)からすべてのトランザクションをフェッチするAPIルートの1つです。
app.get('/transactions', authenticate, (req, res) => {
Transaction.find().then((transaction) => {
res.send({transaction});
}, (e) => {
res.status(400).send();
});
});
これは実行される認証ミドルウェアです。
var authenticate = (req, res, next) => {
var token = req.header('x-auth');
User.findByToken(token).then((user) => {
if (!user) {
return Promise.reject();
}
req.user = user;
req.token = token;
next();
}).catch((e) => {
res.status(401).send();
});
};
ここで私の高速ウェブサーバー上で、私はすべてのデータを取得するためにgetTransactionsを使用する次のルートを持っています。 (これは私がハンドルバーに表示)
router.get('/orders', getTransactions, (req, res) => {
res.render('orders.hbs', {
transaction: req.transactions.data.transaction
});
});
、これは私がちょうどウェブサーバとして明示使用せずに静的なサイトを作っていたときに、私はちょうどにユーザーのサインを持っているでしょうミドルウェア
var getTransactions = (req, res, next) => {
axios.get('https://serene-wave-28270.herokuapp.com/transactions')
.then((response) => {
req.transactions = response;
console.log(req.transactions.data.transaction);
next();
}).catch((e) => {
console.log(e);
})
}
ですauthトークンをローカルストレージに保存します。また、最初の2つのブロックは私のapiから、下の2つはウェブサーバーから、それぞれHeroku上で別々にホストされていることに注意してください。私はそれが標準的な設計かどうか分からないので、私はそれを言及すべきだと思った。
おかげで、私は特急セッションは私が必要なものかもしれないと思います。あまりにも漠然として申し訳ありませんが、あなたの答えが変わったら、いくつかのコードを追加しました! –
@S_Farsai - 新しいコードショーのように認証トークンを使い続ける場合は、ヘッダーからクッキーに移動するだけで、そのクライアントからのすべてのリクエストに自動的に含まれます。これにより、ローカルストレージを使用する必要がなくなり、すべての要求にトークンが自動的に含まれます。 – jfriend00
素晴らしいですよ!私は緑色のチェックを与えた –