新需求,打通自己公司的项目学习平台和nodebb 论坛 用户数据
一脸懵。。。。(在懵也得硬上,滑稽脸)我这里只是实现了一点点。
思路:
找了一圈,找到了nodebb的一个插件,nodebb-plugin-session-sharing,然后将我的平台,和nodebb 放在不同的子域下面,如:我又一个域名www.123.com, 将平台部署在www.a.123.com,将nodebb部署在玩www.b.123.com, 然后平台登录时将用户token 写在123.com的主域上,这个nodebb 就能拿到共有的cookie , 插件会自己加载cookie ,进行逻辑处理。
开始步骤
- github 上找到nodebb
https://github.com/NodeBB/NodeBB - 开始找资源看怎么跑(找了一圈,还是官方文档靠谱)
https://docs.nodebb.org/installing/os/ 选择对应的教程 - window 举例
https://docs.nodebb.org/installing/os/windows/
先按照步骤下载mongoDB , 运行nodebb ,设置管理员账号密码,安装nginx . - 全部装好后,发现本地不知道怎么模拟两个不同的子域名。(哭)
设置本地host文件
- 找到 C:\WINDOWS\system32\drivers\etc。 目录下hosts文件。
最下面添加两句,修改本地路径的指向,域名随便定
192.168.2.6 windows10.microdone.cn www.123.com
127.0.0.1 localhost www.a.123.com www.b.123.com
设置nginx 代理
- 找到nginx 的配置文件 C:\nginx\conf 目录下的nginx.conf。
修改server对象;
端口:4567 是nodebb,3000是我的平台前端项目,8888 是平台服务
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 80;
server_name www.a.123.com;
location / {
root html;
index index.html index.htm;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $http_host;
proxy_set_header X-NginX-Proxy true;
proxy_pass http://www.a.123.com:4567;
proxy_redirect off;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
server {
listen 80;
server_name www.b.123.com;
location / {
root html;
index index.html index.htm;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $http_host;
proxy_set_header X-NginX-Proxy true;
proxy_pass http://www.a.123.com:3000;
proxy_redirect off;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
server {
listen 80;
server_name www.123.com;
location / {
root html;
index index.html index.htm;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $http_host;
proxy_set_header X-NginX-Proxy true;
proxy_pass http://www.123.com:8888;
proxy_redirect off;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
- 然后start nginx 启动后就可以直接用域名访问啦。
- 用域名访问后,nodebb 的websock.io 可能会报错,需要找到配置进行修改
自己找下吧,就是改一下config.json的配置
准备工作做好了,开始吧
- 先在后台登录那写上登录成功后,写去cookie .
// beego
//token 生成方法,就需要自行脑补了,反正有框架的,我不会
passport.Ctx.SetCookie("token",token,9000000, "/","123.com",false,true);
// 参数:
1. key "token" nodebb 插件默认的key 是这个,我懒得改
2. value ,为JWT token 字符串
3. 过期时间
4. 路径
5. domain
6. 忘记了 默认是false
7. onlyHttp 需要设置为true,安全
-
平台进行登录,成功后,cookie 写去浏览器
这样的话 成功一半了
- 登录nodebb
- 登录管理员账号
- 在导航条进入控制面板
- 安装插件
https://github.com/julianlam/nodebb-plugin-session-sharing 文档在这
小学生三连后,启动插件,部署重启 - 运行nodebb 最好开启调试,要不然各种问题,各种懵
nodebb start -d -
设置 session sharing
- 完成后,在重启,
token 可以按照文档中的测试地址进行测试
https://jwt.io/ - 基本这样就可以了。
注意事项
token 中必须要有id,和username 字段,否者不生效