Using PHP sessions with nodebb?


  • @pwFoo I'm not sure I understand which forum was which in your reply. I think what you're asking is there is an API call in nodebb to validate a user, which there is, @ /api/login. It taks a POST with username/password/_csrf as the body variables (in json). If you're doing this cross site though, you'll need to accomplish the task of generating a csrf token. You can do this by making a GET to /api/login, which gives you a csrf token, make sure to then send the following login POST using that csrf token + the express_sid session cookie (session is tied to csrf token).

    Hope that makes sense, or helps you at all. You could created a nodebb plguin that uses some express midlleware that would accomplish all of the above seamlessly. It's best to do in in the plugin where you can customize CORS and other settings on your endpoints for cross domain use.


  • Hello @zackiles ,
    sounds like the feature I'm searching for. Thanks for that hint. 🙂

    Is there a example code how to use the api login?
    I worry that I can't write the needed plugin myself, because I have no experience with nodejs / express...

  • GNU/Linux Admin

    The best advice (in my opinion) is still to maintain a set of OAuth endpoints on the PHP server so NodeBB can authorize users via the sso-oauth plugin...


  • Hi @julian, maybe you're right, but I know some people and friends, who won't use a external login service like oauth, google or fb. So I would prefer an direct auth method between (php) cms and nodebb.
    Optional a oauth login sure is a nice feature, but I think it shouldn't be the default login method.


  • This post is deleted!
  • GNU/Linux Admin

    @pwFoo said:

    So I would prefer an direct auth method between (php) cms and nodebb.

    The OAuth plugin method is actually a direct login method, unless I am not understanding what you are trying to say.

    OAuth is a login mechanism, which allows you to enable third-party applications to handle logins through the same username/password mechanism you have running at the moment.

    For example, check out the new "Log in via NodeBB.org" button in the login page of this site. It leads to a standalone login page, and utilises OAuth2.


  • Ok, I have to take a closer look at it. Maybe I'm wrong...


  • @julian Hi, one quick question related to the topic: I am trying to setup a forum with NodeBB and would like to use Auth0, do you provide a plugin for that?
    if not, how could I implement it?

    Thank you


  • @zackiles I just happend to have had a similar problem. I just wanted to know whether a user is logged in to nodeBB. i tried the approach you outlined, but it failed because the token didn't match. I was able to get it to work though by using a token parsed from /login/ instead. POSTing this token along w/ username/password did the trick.

  • GNU/Linux

    I'm actually dealing with this right now. I went through the trouble of creating an oauth2 api server and customized the nodebb-plugin-sso-oauth plugin to work with it. However, this is quite a bit of overkill just to have my site users authenticated with the forum. Both the forum and the main site sit on the same server, there's no reason nodebb couldn't authenticate against the same database or share the session.

    The points raised here about using the API to authenticate with nodebb simultaneously while logging into the main site are intriguing and will require additional research.

    Ideally I'd like to have my users visit the forum page and seamlessly be logged in without any additional clicks or page visits on their part. I don't see the need for an intermediary "Do you authorize this site?" page.

    Also, and this is to the devs. It's a little disheartening to see you say "use oauth" every time someone has a question about application integration. OAuth is extremely complex and is like using a flamethrower to light your blunt. It shouldn't have to be that hard, especially if the only authentication integration the site owner is doing is with this forum. Why should I have to create an entire additional API system just to support single sign on? This is not a service I'm providing to my users for other sites. It's not like they're going to visit some other page and try to login with credentials from my site. I'm not twitter/facebook/google, etc.

    There's got to be a better way.

  • GNU/Linux Admin

    @KingCat said:

    Also, and this is to the devs. It's a little disheartening to see you say "use oauth" every time someone has a question about application integration. OAuth is extremely complex and is like using a flamethrower to light your blunt. It shouldn't have to be that hard, especially if the only authentication integration the site owner is doing is with this forum.

    Thanks for your thoughts on the matter. It's definitely given me something to think about, and we're not tied directly to any one method, per se.

    Depending on what you're looking for, there are different strategies that you can utilise to accomplish your task.

    Share credentials with another site? Use OAuth2, mostly because it is standardised. The alternative is to have other people build their own integrations with a standardised NodeBB SSO interface, but I feel that this is unnecessarily self-indulgent, especially when OAuth2 is a secure and well-tested system.

    Check login credentials on another site via API call? You can build a plugin that attaches a listener to action:auth.overrideLogin. Then you can do whatever you want and log the user in if the provided username/password matches. (For example, you could use this hook to check creds on an SQL database)


  • @KingCat said:

    I'm actually dealing with this right now. I went through the trouble of creating an oauth2 api server and customized the nodebb-plugin-sso-oauth plugin to work with it. However, this is quite a bit of overkill just to have my site users authenticated with the forum. Both the forum and the main site sit on the same server, there's no reason nodebb couldn't authenticate against the same database or share the session.

    The points raised here about using the API to authenticate with nodebb simultaneously while logging into the main site are intriguing and will require additional research.

    ** Ideally I'd like to have my users visit the forum page and seamlessly be logged in without any additional clicks or page visits on their part. I don't see the need for an intermediary "Do you authorize this site?" page.**

    Also, and this is to the devs. It's a little disheartening to see you say "use oauth" every time someone has a question about application integration. OAuth is extremely complex and is like using a flamethrower to light your blunt. It shouldn't have to be that hard, especially if the only authentication integration the site owner is doing is with this forum. Why should I have to create an entire additional API system just to support single sign on? This is not a service I'm providing to my users for other sites. It's not like they're going to visit some other page and try to login with credentials from my site. I'm not twitter/facebook/google, etc.

    There's got to be a better way.

    For me this is the key point. It would be great if the forum feels like the actual site. One login -> site + forum access.

    I'm expecting to have some time to test the oauth2 approach to integrate Nodebb with wordpress site, but i'm concerning if this approach is transparent for the user at the time on login at the forum, because i don't really like an intermediary page in order to log in to the forum. As i said it would be great to have a solution to integrate it, with 1 login and feel like the forum is part of the site.

    One example of what i'm trying to say can be seen on the QT site. You sign in to the site, but if you go to the forums, you have to log in again, using the Oauth approach.
    It would be great it this could be simplified, to make only 1 login for both.

  • GNU/Linux

    @José-Ángel-Rey-Liñares The upside to using oauth is the user should only need to see the intermediary page once. Once they authorize it should be instant from that point forward unless they clear their browser cookies.

  • GNU/Linux

    @julian said:

    Check login credentials on another site via API call? You can build a plugin that attaches a listener to action:auth.overrideLogin. Then you can do whatever you want and log the user in if the provided username/password matches. (For example, you could use this hook to check creds on an SQL database)

    This is amazing and exactly what I was looking for. I'm going to hit this hard and try to make something that works. Thanks a lot! 🙂


  • IS there any Nodebb API call to logout? In order to call it from the external site when login out, to log out from both at once?
    I dont know if i'm asking something stupid 😥

    @KingCat thanks for the clarification.

  • GNU/Linux Admin

    @José-Ángel-Rey-Liñares At current, no, but this could be something we build into the write-api.

    @KingCat, perhaps I can show you some code to help you out, as it is a very low level hook...

  • GNU/Linux

    @julian That would be awesome. I just started with the quick start plugin and I'm like ......... ok what now? lol. Anything you can do to help shave some time off the next few dozen hours of familiarization would be much appreciated.

  • GNU/Linux Admin

    @KingCat In a nutshell, this is the base code you'll need in your plugin:

    The plugin creates its own passport-local object (because if the hook is listened for, the passport-local object that is normally created by NodeBB is skipped). Since it replaces the local login for NodeBB, the same username/password dialog is used on the NodeBB frontend.


  • I really like how Vanilla Forums does it. http://blog.vanillaforums.com/help/vanilla-jsconnect-single-signon-on/

    You provide a page that gives it the information someone needs when they're logged in https://github.com/vanilla/jsConnectPHP/blob/master/index.php
    Then it has a plugin for the forums itself where you give it the URL for your registration page, and URL for that auth page.

    Even if the solution is "use OAuth", there should at least be a NodeBB plugin that has those settings to input for those URLs for your OAuth landing.

  • GNU/Linux

    @Sadtaco said:

    Even if the solution is "use OAuth", there should at least be a NodeBB plugin that has those settings to input for those URLs for your OAuth landing.

    Yea, there is, it's called nodebb-plugin-sso-oauth. It's what I finally ended up using to integrate my site. It works pretty well actually.

Suggested Topics

| |