バックエンド: Sails.js
REST API 用の JSON Web Token を既に実装しています。フロントエンドからさまざまなコントローラーのアクションへのすべての AJAX 要求は、res.json(data);
Authorization ヘッダーを介して正しい JWT を受信した場合にのみデータを返します。期待どおりに動作します。
今、私は EJS を使用してビューを作成しました<%= name =>
。コントローラーには詳細がres.view('/home', {name: "Bill"} );
あり、それぞれのコントローラーを指すようにルートも構成されています。
属性を持つサーバー側ビューから既に発行された JWT (localStorage に格納されている) で認証することにより、コントローラーから「名前」を取得するにはどうすればよいですか?<%= name =>
ありがとう。
コード:
ビュー/index.ejs
<%= name =>
API/コントローラー/UsersController.js
info: function(req, res) {
var userId = req.token;
Users.findOne(userId).exec(function(err, profile) {
if(err) {
res.json(err);
} else {
res.view('index',{
name: profile.name,
});
}
});
},
API/ポリシー/tokenAuth.js
module.exports = function(req, res, next) {
var token;
if (req.headers && req.headers.authorization) {
var parts = req.headers.authorization.split(' ');
if (parts.length == 2) {
var scheme = parts[0],
credentials = parts[1];
if (/^Bearer$/i.test(scheme)) {
token = credentials;
}
} else {
return res.json(401, {err: 'Format is Authorization: Bearer [token]'});
}
} else if (req.param('token')) {
token = req.param('token');
delete req.query.token;
} else {
return res.json(401, {err: 'No Authorization header was found'});
}
sailsTokenAuth.verifyToken(token, function(err, token) {
if (err) return res.json(401, {err: 'Please Logout and Login again!'});
req.token = token;
next();
});
};
API/サービス/sailsTokenAuth.js
var jwt = require('jsonwebtoken');
module.exports.issueToken = function(payload) {
var token = jwt.sign(payload, process.env.TOKEN_SECRET || "xxxxxxx");
return token;
};
module.exports.verifyToken = function(token, verified) {
return jwt.verify(token, process.env.TOKEN_SECRET || "xxxxxxx", {}, verified);
};
config/routes.js
module.exports.routes = {
'/': {
controller: 'UsersController',
action: 'info'
},
};
解決:
JWT をクライアント ブラウザからサーバーへの認証要素として使用するには、localStorage またはセッション Cookie を使用できます。サーバーでの実装が簡単になったため、最終的にCookieの使用に絞り込みました。
ユーザーを認証した後、JWT をクライアントのブラウザーに保存します。
res.cookie('jwttoken', sailsTokenAuth.issueToken(profile.name));
次に、サービス (jwt.verify) を使用して取得および検証し、またはreq.cookies.jwttoken
経由で要求された情報にアクセスできます。res.json
res.view