Sails.js: 同时应用会话和令牌身份验证策略

Sails.js: applying session and token authentication policies simultaniously

我正在使用 sails.js 开发应用程序。对于 Web 应用程序,我使用带护照的会话身份验证。现在我还需要从移动应用程序访问我的服务器,这需要令牌身份验证。我的问题如下:如何定义策略以便 sails 接受某些路由的 SessionAuth 或 TokenAuth?

sails 处理策略的方式,它们都是使用 AND 逻辑一个接一个地应用的。无法通过其他方式将它们逻辑组合,例如 OR 或更复杂的组合。

在您的情况下,我希望编写第三个策略来处理 "SessionAuth or TokenAuth" 全部在一个策略中会相当容易。假设您现有的 SessionAuth.jsTokenAuth.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'],
}

实际检查可能会稍微复杂一些,但可能不会复杂很多。希望这有帮助。