如何实现 NodeBB 的单点登录?

如何实现 NodeBB 的单点登录?


NodeBB 的 hook

  • NodeBB 的钩子分两种:过滤器和执行器。

filter 过滤器

  • 过滤器应用于内容,当内容在 NodeBB 中传送时,可通过过滤器来过滤内容。

action 执行器

  • action hook 面向事件动作,通过调用 nodebb 的 action hook 来响应用户事件。

编写 NodeBB 时的插件

每个 nodeBB 插件都应对应一个 plugin.json, 用来储存插件的配置。

  • 如:
     {
         "url": "您插件的地址或者 Github 代码库",
         "library": "./my-plugin.js",
         "staticDirs": {
             "images": "public/images"
         },
         "less": [
             "assets/style.less"
         ],
         "hooks": [
             { "hook": "filter:post.save", "method": "filter" },
             { "hook": "action:post.save", "method": "emailme" }
         ],
         "languages": "path/to/languages",
         "nbbpm: {
             { "compatibility": "^0.7.0" }
                 }
     }
    

库方法示例

  • 如果要写个方法,用来监听 action:post.save 钩子, 我们应该添加下面的行到 plugin.json 文件的 hooks 部分:
      {"hook": "action:post.save", "method": "myMethod"}
    
  • 我们的库应该这样写:
     var MyPlugin = {
       myMethod: function(postData) {
           // 在这里处理 postData
        }
     };
    

使用 NodeBB 自带库来增强插件。

  • 如调用 User 类的 exists 方法,
    通过 module.parent.require 来启用你的插件来访问这些 NodeBB 类。
      var User = module.parent.require('./user');
      User.exists('foobar', function(err, exists) {
          // ...
      });
    

安装插件时,包名必须 nodebb-plugin-开头,否则 NodeBB 会找不到它。


可用的 hooks


插件的定制化

如果需要插件可定制化,则可以使用 NodeBB 提供的设置框架


单点登录的实现步骤

一、 登录

  1. 修改 NodeBB 自带的登录函数。
  2. 可能会用到的 hook action:auth.overrideLogin
    • NodeBB 作者写的例子
  3. 通过 hook 拿到用户信息。
    • 调用主站的 api 获取用户信息(user._id)
    • 对比 nodebb 的 uid 是否对应得上。
      • 如果可以则登录 nodebb
      • 对比不上则跳转到登录页面。

二、 发帖

你可能感兴趣的:(如何实现 NodeBB 的单点登录?)