nodebb接入已有的账号体系及实现单点登陆、更改nodebb样式及页面

一、前言

首先,当接到这个实现nodebb单点登陆这个功能需求时,自己还不太了解单点登陆的概念或者说过程原理。所以就只能一步一步入手,从接入自己的账号体系,覆盖已有的登陆体系开始。

二、接入自己的账号体系

首先,看官方提供的例子是必须的

https://gist.github.com/julianlam/19deafaa4dbd624ceecd

这大概的意思就是,为nodebb写一个插件,插件中的plugin.json文件设置  { "hook": "action:auth.overrideLogin", "method": "login" } 钩子,覆盖原有的登陆体系。

前面的博客中介绍了为nodebb编写一个插件的方式

https://blog.csdn.net/qq_36742720/article/details/88995441

下面看我写的覆盖登陆的插件

插件中就只有三个文件,足以覆盖原有的登陆体系。

其中,主要代码在library.js及plugin.json中,下面是两个文件完整代码。

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;

plugin.json

{
    "id": "nodebb-plugin-post-comments", 
    "name": "new a plugin for comment of post", 
    "description": "NodeBB Plugin that allows users to mention other users by prepending an '@' sign to their username",  
    "url": "http://www.google.com",
    "library": "./library.js",
    "hooks": [
        { "hook": "action:auth.overrideLogin", "method": "login" }
    ],
   "nbbpm": {
        "compatibility": "^0.7.0"
    }
}

接着说下library.js中我并没有使用官方提供的  next(null,{uid:uid},'[[success:authentication-successful]]');进行登陆操作,而是通过用户的用户名进行登陆。因为在这里我并没有找到能够通过用户名拿到存储在nodebb中用户uid的方式。

另外要说明的一点是,这里的这里进行create时,第一次登陆的用户会create,就会在nodebb中创建一个用户,下一次登陆时,会再次执行create,但没有关系,nodebb不会给你创建两个一样的用户,所以这里代码逻辑是能够走通的。

这就是一个整个的覆盖登陆的流程。

三、实现cas单点登陆

刚开始做的时候完全是懵的,首先是对nodebb登陆体系不是特别熟悉,其次对公司单点登陆体系也不熟悉,所以完全不知道从哪下手。后面在公司老大的协助下,慢慢的实现了(到现在还能回想起那时成功的激动与兴奋)。

首先得益于git上的一个单点登陆案例。

https://github.com/ld000/nodebb-plugin-cas

一开始以为它能够直接npm install 下载下来,但是后面发现它并没有发布在npm上,所以我又通过给nodebb编写新插件的方式把这个插件放到了我的项目上。

通过这个插件的library.js可以发现,这哥们实际上做的事情就是对nodebb中的路由进行拦截,拦截后做自己一系列cas单点登录的操作。所以我就在它写好的插件中进行改造。

注意:在进行此步骤前,你需要先了解你已有单点登陆系统体系

首先,在点击nodebb首页右上角登陆按钮时,拦截了  /api/login  这个路由,让其跳转到单点登陆验证url

跳转过去进行登陆成功之后,单点登陆体系会跳转回你service传递的参数url,并在这个url后携带ticket参数。

这时,用这个ticket以及上面的service作为参数去请求一个接口,该接口能够返回给你登陆的用户信息。

拿到用户信息后,我再对该用户进行create,也就是上面第二大项,然后使用用户名进行登陆。

这样,一个简单的单点登陆功能就实现了。

四、更改nodebb的样式、界面

不得不说,nodebb是真的强大。

使用管理员账号登陆nodebb,在管理后台可以进行界面自定义代码

在这里面,我们可以手写各种css样式,甚至写各种js,来达到我们想要的页面效果。

 

 

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值