Skip to content

Technical Support

Need help with installing or configuring NodeBB? Look here.

4.7k Topics 26.2k Posts

Subcategories


  • User documentation for NodeBB

    44 Topics
    44 Posts
    Jay MoonahJ

    One of the first important things to do after setting up NodeBB is to set up an emailer plugin. While NodeBB does include a local emailer, if your forum is particularly active we recommend using an third-party emailer such as SendGrid which provides better deliverability for sites that send a high volume of email. Setting up SendGrid in NodeBB is very easy.

    Open the administrative dashboard using the 'gear' icon on your forum. Open the Extend > Plugins menu, and select the Find Plugins tab. Use the search on the right. Type 'SendGrid' and the plugin should appear -- select Install when you see it. From Installed tab on the Plugins menu, search again for 'SendGrid' and select Activate. Activating the plugin will require a restart of your forum. To restart, select the Dashboard menu and press the Restart button to the right. After NodeBB restarts, the SendGrid plugin will be active.

    After you restart, there should be a item called Emailer (SendGrid) under the Plugins menu -- if you don't see this right away, try refreshing your browser.

    Sign up to SendGrid

    Go to the SendGrid website, open the pricing page and scroll to the bottom. Click on the link and create your free account. Once you've confirmed your SendGrid account via email, you should be able to login to the SendGrid website. On the left side of your SendGrid dashboard, open Settings and click on API Keys. Click the button in the top right to create a new key. Make sure that the key has Full Access for Send Mail and Alerts.  When you are done, the new key to your clipboard.

    Now, return to the SendGrid menu on your NodeBB admin panel. Paste the API key into the field, and save your changes. Now go back to the Dashboard to restart your forum one more time.

    SendGrid should now be working for your forum.

    YouTube Setting up SendGrid mailer for NodeBB

  • NodeBB guides, how-to's and general tips and tricks

    82 Topics
    599 Posts
    barisB

    Quick start plugin has an example on how to add a new api route https://github.com/NodeBB/nodebb-plugin-quickstart/blob/master/library.js#L40-L76.

    The hooks that are fired client side are for client side code in plugins. If you want to pass data from the client to the server you have two options.

    Create an api route like in quick start plugin Create a new socket event listener on the server side and use socket.emit() client side. Example here
  • 25 Topics
    201 Posts
    eeeeeE

    I think you answered my point, by agreeing there are issues.
    I didn't even attempt to deploy nodebb, I had problems with much smaller projects!
    Nextjs routing was going through a change of design at the time, so perhaps that is less confusing now, but there were multiple other headaches. I would get build errors and issues with package management.

  • /user/<xyz>/2factor Access Denied?

    Unsolved
    5
    0 Votes
    5 Posts
    82 Views
    ww9riversW

    @julian - Done! Thank you for the quick responses.

  • Performance insights of NodeBB

    Unsolved
    10
    0 Votes
    10 Posts
    223 Views
    barisB

    Yeah I think having a folder under public/uploads/profile for each user would make deleting easier. We can get rid of the glob and delete that folder on user deletion. But we would have to write an upgrade script to move all files and update the path in the user object since they are stored as "/assets/uploads/profile/1-profileavatar-1709738685611.jpeg"

  • Failed to look up latest available version of NodeBB

    Solved
    5
    0 Votes
    5 Posts
    87 Views
    Sampo2910S

    @PitaJ v16.13.0 obviosuly very old 😞 Ooops..installed latest version and now it is all ok..

    Thanks for the gentle reminder.

  • This topic is deleted!

    Unsolved
    2
    0 Votes
    2 Posts
    5 Views
  • Invalid CSRF token when authenticating via third-party app

    Unsolved
    7
    1 Votes
    7 Posts
    713 Views
    S

    @hnipps said in Invalid CSRF token when authenticating via third-party app:

    I'm trying to use NodeBB as a headless forum (i.e. just a REST API with a separate front end) but keep getting an "invalid csrf token" error when I try to authenticate.

    I've confirmed I can authenticate via the NodeBB UI on the same instance.

    I've also tried getting the NodeBB config and using the csrf token from there in my requests but it still does not work.

    My frontend is a NextJS app that rewrites all /api/:path* requests to http://<MY-NODE-BB-INSTANCE>/api/:path*. It also rewrites the auth paths.

    I can see the requests reach NodeBB but always get "invalid csrf token".

    I've verified that I can successfully call GET endpoints from my app, e.g. I can get the user list from /api/users.

    This is a 2 yr old thread, but @hnipps have you gone any further with the React/NextJS frontend with a headless nodebb?
    If you have made any progress I would love to contribute on the frontend build. It is daunting to start as a new project but if any foundations were laid I would love to jump in and build upon it.

  • 0 Votes
    14 Posts
    850 Views
    S

    Thank you @julian you always respond and seem motivated in helping the community. By proprietary I meant no effort has been made to provide clean working examples for the latest nodebb, as in maintenance of such documentation for people jumping into nodebb to replace their old system.

    You have a great product here, with so much more potential and I understand you may not have resources and funding to provide so much documentation and maintain working example of a plugin that does CRUD with custom fields/custom data, but it becomes harder for new adopters if they're unable to figure out cost effective way to replace their old platforms which have plethora of 3rd party add-ons and plugins especially dealing with custom fields and custom data.

    I take the blame as well, as part of the community it is partly our job to help keep a set of quickstart plugins, documentation, help available to enhance and optimize the process for new adopters. I hope the community gets together and makes something like a curated directory of available plugins, and tags and tracks what versions each supports, and tries to keep a version that supports the latest major version updates.

    Thank you for the wonderful product, I keep trying and finding an excuse to adopt it and hopefully I will get there sooner or later.

  • hiding "moved" badge from topic list

    Solved
    3
    1 Votes
    3 Posts
    69 Views
    crazycellsC

    @baris thank you very much. 👍

  • This topic is deleted!

    Unsolved
    1
    0 Votes
    1 Posts
    9 Views
  • codes for the skins

    Solved
    3
    0 Votes
    3 Posts
    37 Views
    crazycellsC

    @baris said in codes for the skins:

    The css for these are coming from https://bootswatch.com/, you can find them in nodebb/node_modules/bootswatch/dist

    Thank a lot... I searched the GitHub and found them here:

    Link Preview Image bootswatch/dist at v5 · thomaspark/bootswatch

    Themes for Bootstrap. Contribute to thomaspark/bootswatch development by creating an account on GitHub.

    favicon

    GitHub (github.com)

  • How does nodebb-plugin-link-preview work exactly?

    Solved
    2
    0 Votes
    2 Posts
    71 Views
    julianJ

    Replied in the other linked topic.

  • Scaling Nodebb on Apache 2.4

    Unsolved
    6
    1 Votes
    6 Posts
    165 Views
    Nuran AkimbekN

    @julian yeah, database in the same VM. I already did re-indexing using this commands.

  • 3.7.0 Upgrade Support

    22
    2 Votes
    22 Posts
    855 Views
    crazycellsC

    @phenomlab said in 3.7.0 Upgrade Support:

    @crazycells

    62085e6b-8993-47e4-80d8-2f07f862ca07-image.png

    looks delicious 😄

    Monkey Ape GIF

  • Quick Reply missing after upgrade to 3.7.0

    Unsolved
    18
    0 Votes
    18 Posts
    211 Views
    julianJ

    @B-738 spiders are bots, web crawlers, etc.

    You can restrict access to them for certain categories, for example.

  • 0 Votes
    4 Posts
    133 Views
    A

    As you named your postgres container db, you should use db as database host.

  • How can I change Redis configuration directory?

    Solved
    7
    0 Votes
    7 Posts
    2k Views
    Daniel Mendoza PupoD

    @julian I tried that route, and it still didn't work:
    -rw-r--r--. 1 redis redis 63122 Mar 6 13:56 /path/to/redis/redis.conf
    redis.service: (changed the path to my redis.conf)
    ExecStart=/usr/bin/redis-server /path/to/redis/redis.conf --supervised systems

    After changing the redis service file:
    systemctl daemon-reload
    systemctl start/restart redis
    ● redis.service - Redis persistent key-value database
    Loaded: loaded (/usr/lib/systemd/system/redis.service; enabled; vendor preset: disabled)
    Drop-In: /etc/systemd/system/redis.service.d
    └─limit.conf
    Active: failed (Result: exit-code) since Thu 2024-03-07 16:18:06 EST; 7s ago
    Process: 3672598 ExecStop=/usr/libexec/redis-shutdown (code=exited, status=0/SUCCESS)
    Process: 3672869 ExecStart=/usr/bin/redis-server /path/to/redis/redis.conf --supervised systemd (code=exited, status=1/FAILURE)
    Main PID: 3672869 (code=exited, status=1/FAILURE)

    Mar 07 16:18:06 my-lab systemd[1]: Starting Redis persistent key-value database...
    Mar 07 16:18:06 my-lab redis-server[3672869]: 3672869:C 07 Mar 2024 16:18:06.355 # Fatal error, can't open config file '/path/to/redis/redis.conf'
    Mar 07 16:18:06 my-lab systemd[1]: redis.service: Main process exited, code=exited, status=1/FAILURE
    Mar 07 16:18:06 my-lab systemd[1]: redis.service: Failed with result 'exit-code'.
    Mar 07 16:18:06 my-lab systemd[1]: Failed to start Redis persistent key-value database.

  • 0 Votes
    2 Posts
    112 Views
    crazycellsC

    In case anyone else might be intrested, I fixed this color problem using these codes:

    .category-1 , .category-70 , .category-120 { .category-children-item .fa-caret-right { color: #ff9800 !important ; } } .category-111 { .category-children-item .fa-caret-right { color: #e91e63 !important ; } } .category-2 , .category-77 , .category-78 , .category-126 , .category-127 , .category-132 , .category-93 , .category-115 { .category-children-item .fa-caret-right { color: #4caf50 !important ; } }

    Basically I had to name each category separately... So, if there is any suggestion to shorten the code, I would love to hear... 🤣

  • Send email notification to admin from new registered users.

    Unsolved
    7
    0 Votes
    7 Posts
    133 Views
    barisB

    I've updated this plugin to nodebb 3.2 and up, new version is 3.0.0.

  • Bulk move users to group?

    Moved
    2
    1 Votes
    2 Posts
    84 Views
    barisB

    You would have to run a custom script like below. Place it in your nodebb folder, change the group name your special access group and run it with node myscript.js. It will add all users who have 10 posts or more into that group.

    'use strict'; const nconf = require('nconf'); nconf.file({ file: 'config.json', }); nconf.defaults({ base_dir: __dirname, views_dir: './build/public/templates', upload_path: 'public/uploads', }); const db = require('./src/database'); const groupName = '<Replace with your groupname>'; db.init((err) => { if (err) { console.log(`NodeBB could not connect to your database. Error: ${err.message}`); process.exit(); } addUsersToGroup((err) => { if (err) { console.error(err); process.exit(); } console.log('done'); process.exit(); }); }); async function addUsersToGroup(callback) { const user = require('./src/user'); const groups = require('./src/groups'); const batch = require('./src/batch'); // check if target group exists const exists = await groups.exists(groupName); if (!exists) { return callback(new Error('group does not exist')); } try { const now = Date.now(); await batch.processSortedSet('users:joindate', async (uids) => { const userData = (await user.getUsersData(uids)) .filter(u => u && u.postcount >= 10); await db.sortedSetAdd( `group:${groupName}:members`, userData.map(() => now), userData.map(u => u.uid) ); }, { batch: 500, }); const memberCount = await db.sortedSetCard(`group:${groupName}:members`); console.log('total count', memberCount); await db.setObjectField(`group:${groupName}`, 'memberCount', memberCount); await db.sortedSetAdd( 'groups:visible:memberCount', memberCount, groupName, ); callback(); } catch (err) { callback(err); } }
  • 0 Votes
    2 Posts
    60 Views
    phenomlabP

    @ursyaathi You'd be better placed using SSO for that - see https://community.nodebb.org/topic/17484/a-more-standardised-sso-implementation/2?_=1709300209014

  • Navigating to specific post

    Solved
    3
    0 Votes
    3 Posts
    114 Views
    R

    Thanks!, I was able to debug the issue.