美文网首页
如何实现 NodeBB 的单点登录?

如何实现 NodeBB 的单点登录?

作者: bitstring | 来源:发表于2017-01-07 20:38 被阅读0次

    如何实现 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
    3. 通过 hook 拿到用户信息。
      • 调用主站的 api 获取用户信息(user._id)
      • 对比 nodebb 的 uid 是否对应得上。
        • 如果可以则登录 nodebb
        • 对比不上则跳转到登录页面。

    二、 发帖

    相关文章

      网友评论

          本文标题:如何实现 NodeBB 的单点登录?

          本文链接:https://www.haomeiwen.com/subject/mggfbttx.html