上面两篇文章是通过CAS中央认证系统实现的登录,方案有点复杂,而且有时需要不改Nodebb原有登录界面的情况下实现企业账号共享。
实现步骤:
一,企业服务实现登录api接口,提供接口,用于第三方登录。
这步的实现不描述了,因为每个企业的后台实现方案不一样。
二,开发Nodebb插件,重写Nodebb登录方法。
1,插件的三个常规文件
package.json:
{
"name": "nodebb-plugin-api-login",
"version": "0.2.6",
"description": "NodeBB插件的 LOGIN",
"main": "library.js",
"repository": {
"type": "git",
"url": "https://github.com/nodebb-china/nodebb-plugin-quickstart"
}
}
plugin.json:
{
"id": "nodebb-plugin-marvoto",
"name": "new a plugin for marvoto login",
"description": "NodeBB Plugin that allows users to mention other users by prepending an '@' sign to their username",
"url": "http://www.marvoto.com",
"library": "./library.js",
"hooks": [
{ "hook": "action:auth.overrideLogin", "method": "login" }
],
"nbbpm": {
"compatibility": "^0.7.0"
}
}
library.js
var winston = require('winston');
var URL = require('url');
var passport = module.parent.require('passport'),
passportLocal = module.parent.require('passport-local').Strategy,
plugin = {};
plugin.login = function() {
winston.info('[login] Registering new local login strategy');
passport.use(new passportLocal({passReqToCallback: true}, plugin.continueLogin));
};
plugin.continueLogin = function(req, username, password, next) {
console.log('登录中')
// 1、调用后端api检查用户名密码是否正确,如果正确
if (true) {
console.log('登录成功')
console.log(username)
console.log(password)
var user = require.main.require("./src/user")
// 2、创建用户
user.create({
username: username,
email: `${username}@xiaomi.com`,
},function(res){
// 3、登陆
var userController =
require.main.require('./src/controllers/user');
userController.getUserDataByField(1, 'username', username,
next)
})
}
else{
next(new Error('[[error:invalid-username-or-password]]'));
}
};
module.exports = plugin;
2,编译/部署插件
完工,此时点击登录时,就会自动执行此js脚本了。比CAS简单快捷。