如何实现 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 提供的设置框架
单点登录的实现步骤
一、 登录
- 修改 NodeBB 自带的登录函数。
- 可能会用到的 hook
action:auth.overrideLogin
- 通过 hook 拿到用户信息。
- 调用主站的 api 获取用户信息
(user._id)
- 对比 nodebb 的 uid 是否对应得上。
- 如果可以则登录 nodebb
- 对比不上则跳转到登录页面。
- 调用主站的 api 获取用户信息
网友评论