如何编辑 url 以注销 ApostropheCMS

How to edit the url to log out of ApostropheCMS

我正在研究一种将 OAuth2 登录到 ApostropheCMS 的特定策略。登录系统后,我需要通过允许我执行 OAuth2 流程的身份服务器 url 关闭会话。

而不是使用 http://localhost:3000/logout, use http://localhost:port/auth/oauth2/logout。但是我找不到在 ApostropheCMS 中使用注销 link 编辑 url 的位置。

目前无法编辑注销路由路径。然而,callback on that route is fairly simple,所以简单地编写自己的路由来做同样的事情可能相当容易。

self.apos.app.get('/logout', function(req, res) {
  return req.session.destroy(function(err) {
    if (err) {
      self.apos.utils.error(err);
    }
    res.redirect('/');
  });
});

我相信你是说你不需要复制注销功能(你已经这样做了),你需要在管理栏中更改注销 link。幸运的是,有一个很好的方法。

与大多数模块一样,apostrophe-login 模块在名为 addAdminBarItems 的方法中添加了其管理栏按钮。该方法如下所示:

    self.addAdminBarItems = function() {
      var items = [];
      var key;
      if (self.options.resetKnownPassword) {
        key = self.__meta.name + '-reset-known-password';
        self.apos.adminBar.add(key, 'Change Password', null);
        items.push(key);
      }
      key = self.__meta.name + '-logout';
      self.apos.adminBar.add(key, 'Log Out', null, { last: true, href: '/logout' });
      items.push(key);
      if (items.length > 1) {
        self.apos.adminBar.group({
          label: 'Account',
          items: items,
          last: true
        });
      }
    };

我们可以覆盖它以满足我们的需要。

在项目级别创建 lib/modules/apostrophe-login/index.js。不要从 node_modules 复制和粘贴整个内容,这从来都不是必需的,我们在这里覆盖了一种方法。撇号会自动看到并将我们的更改应用于原始内容。

文件如下所示:

// in lib/modules/apostrophe-login/index.js of your project
module.exports = {
  construct: function(self, options) {
    self.addAdminBarItems = function() {
      key = self.__meta.name + '-logout';
      self.apos.adminBar.add(key, 'Log Out', null, { last: true, href: '/anywhere/you/want/it/to/go' });
    };
  }
};

这将替换我们需要更改的方法,而不会更改任何其他内容。