Using PHP sessions with nodebb?
-
@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!
-
@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.
-
@KingCat In a nutshell, this is the base code you'll need in your plugin:
https://gist.github.com/julianlam/19deafaa4dbd624ceecd
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.
-
@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.
-
@KingCat said:
@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.
That's not a complete plugin, though. I don't fully get what I would need to fill in to have it work if I were to fork it. And if I were to fork it, then I'd have a public plugin for my private accounts.
A full plugin would have an admin page where you input what is needed, and more of a guide on how to set up the OAuth end of things where the accounts are. -
@Sadtaco This was the original intention of the sso-oauth plugin, but because the last step of the OAuth handshake is a call to a "get user info" style route from the other site, the logic for handling this cannot be determined ahead of time, and thus I cannot fully automate the plugin in that way.
-
@julian I see. Well I'm trying to basically port Vanilla's plugin to Nodebb, but I'm not sure if I'll be able to so it'd be cool if you devs had some official, simpler solution like it.
Vanilla's is really easy. You give it the url for your registration and login page, and a url where it expects JSON to return for a users name, email, etc if they're logged in. If they're logged in, it creates a Vanilla forum user for them if one doesn't already exist. If they already on, it just logs them in normally as if they typed in their username and password on the Vanilla forums.
So no matter what auth system you use, you can use your own API to output the JSON it wants, so long as the client-id and secret key supplied matches up as well. I have my own accounts system and it took me like <1 hour to read the documentation for how to set it up with Vanilla's and do a custom implementation.
Reading the oauth plugins on the other hand, I'm rather clueless on what I need to do to make it work for my own, and what I need on my own site's end of things. Like looking at the BNET plugin, I can't figure out what "clientID: process.env.BNET_ID" and "clientSecret: process.env.BNET_SECRET" are, among other things. It's just too in depth for something that should be simpler.edit: Actually I see what the process.env are. They're user environment variables. But well, still, the oauth sso is way more complicated than I think a lot of people will want.
Like if I want to replace the profile, I'd rather that have a separate plugin replacing the profile. Not part of the OAuth implementation. I imagine I can just cut that out while forking, but still. I wish there was something as simple as Vanilla's JSONP SSO.And as I look through more, I'm not seeing why authorizationURL, tokenURL, clientID, clientSecret can't just be on settings pages instead of constants, with an oauth/oauth2 radial.