Sails.js: 同时应用会话和令牌身份验证策略
Sails.js: applying session and token authentication policies simultaniously
我正在使用 sails.js 开发应用程序。对于 Web 应用程序,我使用带护照的会话身份验证。现在我还需要从移动应用程序访问我的服务器,这需要令牌身份验证。我的问题如下:如何定义策略以便 sails 接受某些路由的 SessionAuth 或 TokenAuth?
sails 处理策略的方式,它们都是使用 AND 逻辑一个接一个地应用的。无法通过其他方式将它们逻辑组合,例如 OR 或更复杂的组合。
在您的情况下,我希望编写第三个策略来处理 "SessionAuth or TokenAuth" 全部在一个策略中会相当容易。假设您现有的 SessionAuth.js
和 TokenAuth.js
政策如下所示:
module.exports = function(req, res, next) {
if (req.isSessionAuthorized()) {
return next();
}
// handle rejected request
};
,并且,
module.exports = function(req, res, next) {
if (req.isTokenAuthorized()) {
return next();
}
// handle rejected request
};
然后您只需创建第三个策略 SessionOrTokenAuth.js
:
module.exports = function(req, res, next) {
if (req.isSessionAuthorized() || req.isTokenAuthorized()) {
return next();
}
// handle rejected request
};
然后将新创建的策略应用到 /config/policies.js
中所需的控制器端点:
SomeController: {
'*': true,
'sessionOnlyEndpoint': ['SessionAuth'],
'tokenOnlyEndpoint': ['TokenAuth'],
'anyAuthEndpoint': ['SessionOrTokenAuth'],
}
实际检查可能会稍微复杂一些,但可能不会复杂很多。希望这有帮助。
我正在使用 sails.js 开发应用程序。对于 Web 应用程序,我使用带护照的会话身份验证。现在我还需要从移动应用程序访问我的服务器,这需要令牌身份验证。我的问题如下:如何定义策略以便 sails 接受某些路由的 SessionAuth 或 TokenAuth?
sails 处理策略的方式,它们都是使用 AND 逻辑一个接一个地应用的。无法通过其他方式将它们逻辑组合,例如 OR 或更复杂的组合。
在您的情况下,我希望编写第三个策略来处理 "SessionAuth or TokenAuth" 全部在一个策略中会相当容易。假设您现有的 SessionAuth.js
和 TokenAuth.js
政策如下所示:
module.exports = function(req, res, next) {
if (req.isSessionAuthorized()) {
return next();
}
// handle rejected request
};
,并且,
module.exports = function(req, res, next) {
if (req.isTokenAuthorized()) {
return next();
}
// handle rejected request
};
然后您只需创建第三个策略 SessionOrTokenAuth.js
:
module.exports = function(req, res, next) {
if (req.isSessionAuthorized() || req.isTokenAuthorized()) {
return next();
}
// handle rejected request
};
然后将新创建的策略应用到 /config/policies.js
中所需的控制器端点:
SomeController: {
'*': true,
'sessionOnlyEndpoint': ['SessionAuth'],
'tokenOnlyEndpoint': ['TokenAuth'],
'anyAuthEndpoint': ['SessionOrTokenAuth'],
}
实际检查可能会稍微复杂一些,但可能不会复杂很多。希望这有帮助。