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

2023-05-16

一、前言

首先,当接到这个实现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,来达到我们想要的页面效果。

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

  • Java获取系统内存、CPU、磁盘等信息

    前言 xff1a 代码从别处摘抄收集 xff0c 留着以后需要的时候使用 xff0c 已经亲自测试可用 xff0c 支持各种操作系统 xff08 Windows mac linux xff09 参考项目https github com os
  • tar 命令详解

    tar c 建立压缩档案 x xff1a 解压 t xff1a 查看内容 r xff1a 向压缩归档文件末尾追加文件 u xff1a 更新原压缩包中的文件 这五个是独立的命令 xff0c 压缩解压都要用到其中一个 xff0c 可以和别的命令
  • Java上传文件到Windows共享目录问题 STATUS_ACCESS_DENIED(0xc000022)

    Java上传文件到Windows共享目录问题 smpj上传到Windows共享目录一直失败 xff0c 报STATUS ACCESS DENIED xff08 0xc000022 xff09 在GitHub上看错误码是服务器上报的 xff0
  • python pip打包记录

    Makefile all 64 echo nothing special lint python3 m mdk tools cli py lint prepare python3 m pip install r requirements t
  • MySql 和 PostgreSQL 数据库 根据一张表update另一张表数据

    postgre更新单列 UPDATE production fix event pfe SET bad event id 61 SELECT be id FROM bad event be WHERE pfe key 61 be key 1
  • 给linux命令cp和mv加进度条

    使用 Github 上的开源项目 advcpmv 来实现 Linux 中的 cp 和 mv 命令的进度条 下载coreutils wget https mirrors aliyun com gnu coreutils coreutils 9
  • Ubuntu 如何更新软件源(阿里源、华为源、清华源等)

    链接 xff1a Ubuntu 如何更新软件源 阿里源 华为源 清华源等
  • pytest增加描述列

    pytest html报告优化 添加Description 在confest py代码填写如下内容 xff1a 64 pytest span class token punctuation span mark span class toke
  • 练习题-水仙花数

    水仙花数 水仙花数 xff1a 3位数 xff0c 百位 十位 各位的立方和等于本身 python 版本1 sum1 61 0 for a in range 1 10 for b in range 10 for c in range 10
  • C++字符串拼接 字符串拼接

    C 43 43 字符串拼接 字符串拼接 功能描述 xff1a 实现在字符串末尾拼接字符串 span class token macro property span class token directive keyword include
  • kali 安装Android安全测试框架Drozer

    Drozer是MWR Labs开发的一款Android安全测试框架 是目前最好的Android安全测试工具之一 Adb就是一个命令行窗口 xff0c 用于通过电脑端与模拟器或者真实设备交互 一 安装drozer xff1a 环境 xff1a
  • 卡尔曼滤波

    卡尔曼滤波是一个纯时域的滤波器 xff0c 不需要进行频域变换 xff0c 描述状态之间的线性关系 卡尔曼滤波主要由两部分组成 xff1a 1 预测 xff1a 使用上一阶段的状态来预测当前状态的预测值 2 校正 xff1a 利用对当前状态
  • CF 1157D N Problems During K Days

    CF 1157D N Problems During K Days 题目链接题面题目大意题目分析代码 题目链接 我是题目链接戳我呀 gt lt 题面 题目大意 Polycarp想要在 k 天做 n 道题 xff0c 并且他希望每一天做的题量

随机推荐

  • ubuntu的命令&操作

    记录ubuntu系统使用中一些常用的操作 1 在ubuntu终端打开图像界面的文件夹 xff1a cd到指定的目录之后执行nautilus即可 参考 xff1a linux系统ubuntu中在命令行如何打开图形界面的文件夹 李照耀 博客园
  • CF 1156B Ugly Pairs

    CF 1156B Ugly Pairs 题目链接题面题目大意题目分析代码 题目链接 我是题目链接戳我呀 gt lt 题面 题目大意 有 T 个字符串 xff0c 对于每个字符串可任意更改其位置 xff0c 使相邻的两个字符的ascii码相差
  • 傅里叶变换与EEG傅里叶变换处理

    傅里叶变换与EEG傅里叶变换处理 EEG与傅里叶变换 The Basics of Signal Processing Fourier transforms Nyquist frequency sampling theorem and ali
  • 【详解】计算机视觉算法导读篇

    目录 1 深度学习发展史2 计算机视觉概述2 1 定义2 2 任务分解2 3 应用场景2 4 计算机视觉发展史 1 深度学习发展史 起源 xff1a 深度学习所需要的神经网络技术起源于20世纪50年代 xff0c 叫做感知机 当时也通常使用
  • Linux ManJaro 换源、安装应用

    1 换源 sudo pacman mirrors i c China m rank pacman文件配置 sudo nano etc pacman conf 在末尾插入 xff08 可以先浏览器打开源看是否可用 xff09 archlinu
  • 树莓派(RPi) CentOS7安装配置PHP7

    在树莓派配置了Nginx之后 xff0c 自然要上PHP大法 在下萌新 xff0c 学习PHP的时候直接入手的PHP7 xff0c 所以我就在树莓派上也配置了PHP7 xff0c 现在我将安装过程写下来分享一下 0 环境说明 设备 xff1
  • 树莓派使用apt-get安装配置Nginx+PHP7+MySQL(MariaDB)附带部分细节

    最近使用树莓派搞定了一个小项目 xff0c 现在树莓派闲置了 xff0c 正好拿来做一个小型Web服务器进行功能测试 没想到配置的过程比我想象的复杂 xff0c 好多小细节是用云服务器的时候没遇见过的 我已经尝试写的很简洁了 xff0c 各
  • UnknownError:Fail to find the dnn implementation解决方法

    程序加上下面代码 gpus 61 tf config experimental list physical devices 39 GPU 39 if not gpus return 34 No GPU available 34 try Cu
  • 设置pandas打印所有列

    pd set option display max columns None
  • 使用tensorflow时报错Could not create cudnn handle: CUDNN_STATUS_INTERNAL_ERROR

    使用tf2 1时 xff0c cuda和cudnn都安装好了 xff0c 报错 Could not create cudnn handle CUDNN STATUS INTERNAL ERROR 最开始以为是cudnn版本问题 xff0c
  • linux安装mongo数据库软件robo3T(转载)

    robo 3T xff08 robomongo xff09 在ubuntu16 04上安装记录 96 王南北丶 2017 10 08 22 19 字数 450 阅读 1622评论 2喜欢 3 robo 3T是mongodb的一个非常好用的可
  • spss入门基本用法

    一 xff0e 数据 1 个案排序 xff1a 对数据视图中的某个个案进行排序 xff0c 具体排序规则可以点进去选择 2 变量排序 xff1a 对变量视图中某个变量进行排序 xff0c 具体规则可以点进去选择 3 转置 xff1a 行列互
  • 点积的概念

    在数学中 xff0c 数量积 xff08 dot product scalar product xff0c 也称为点积 xff09 是接受在实数R上的两个向量并返回一个实数值标量的二元运算 它是欧几里得空间的标准内积 两个向量a 61 a1
  • 如何在jupyter notebook直接安装模块

    pip install 模块名 注意要加 xff01
  • networkx 不能显示中文的解决办法

    修改pythonx lib site packages matplotlib mpl data matplotlibrc 用记事本打开 找到font family sans serif xff0c 将前面的 去掉 找到font sans s
  • sift = cv2.xfeatures2d.SIFT_create()运行报错解决方案

    可以把原opencv卸载 xff08 pip uninstall opencv xff0c 然后安装扩展版本的opencv xff0c pip install opencv contrib python 61 61 3 4 2 16 xff
  • early EOF index-pack failed的解决办法

    git chone时报错如下 xff1a fatal The remote end hung up unexpectedly fatal early EOF fatal index pack failed 网上找了各种办法后 xff0c 又
  • CentOS7.9通过rpm离线安装mysql8.0

    mysql5 6安装参考 xff1a https blog csdn net lgxzzz article details 124409836 mysql5 7安装参考 xff1a https blog csdn net weixin 44
  • excel复制后卡死的解决办法

    excel复制表格中的内容后 xff0c 整个excel表格会卡死 xff0c 下面给出两个解决办法 第一步点击 文件 选项 加载项 转到 xff0c 取消方框内所有选项 xff0c 第二步点击 文件 选项 公式 xff0c 在工作簿计算中
  • nodebb接入已有的账号体系及实现单点登陆、更改nodebb样式及页面

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