Серверная часть: Sails.js
Я уже внедрил JSON Web Token для REST API, где все AJAX-запросы от внешнего интерфейса к действиям различных контроллеров возвращают данные res.json(data);
только в том случае, если он получает правильный 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);
};
конфиг/routes.js
module.exports.routes = {
'/': {
controller: 'UsersController',
action: 'info'
},
};
РЕШЕНИЕ:
Чтобы использовать JWT в качестве фактора аутентификации от браузера клиента к серверу, можно использовать либо localStorage, либо файл cookie сеанса. Я, наконец, сузил его до использования файла cookie из-за более простой реализации на сервере.
После аутентификации пользователя сохраните JWT в браузере клиентов,
res.cookie('jwttoken', sailsTokenAuth.issueToken(profile.name));
Затем его можно получить с помощью req.cookies.jwttoken
и проверить через службу (jwt.verify), чтобы предоставить доступ к запрошенной информации через res.json
или res.view
.