Invision Community 4: SEO, prepare for v5 and dormant account notifications Matt November 11, 2024Nov 11
Posted June 17, 20186 yr Some years ago, I built a bespoke CMS for the website associated with our community that authenticated its logins against the v3 IPB member database. This enabled me to leverage IPB's user management features, which were applicable to the CMS too (user roles and permissions, etc). This broke completely with the introduction of v4, and I've been holding off upgrading until I can figure out how to make it work again in a dev environment. Sadly, I'm having no luck whatsoever! I've been trying to grok the information provided in the Developer Documentation, but my PHP skills are rusty, and none too advanced these days, so I thought I'd ask for some guidance here. Also, most of the approaches in the docs are about providing alternative login methods for the forums themselves, which is not what I'm trying to do. I merely need to authenticate a user's credentials against those stored in the database, and then let the CMS do the rest. I thought I might have hit upon a usable solution with the SSO approach detailed in the documentation: However, upon successfully acquiring the logged-in user's details, I attempt to store them in the session that gets created for the CMS, but it doesn't persist, and it seems that I end up with two different session IDs. I'm assuming that the following code intialises an IPB session that subsequently clashes with my own session: /* Initiate the session to verify who this user is */ \IPS\Session\Front::i(); Any idea how to get past this issue? I'm really stuck right now. Kev
June 25, 20186 yr So you have the user's authentication details (username/email and password) and want to validate them against an Invision Community database? Assuming you are using 4.3.x and you are using the Standard/Internal login handler, you should be able to do the following: require '/path/to/forums/init.php'; $username = ''; $password = ''; $login = new \IPS\Login( \IPS\Http\Url::external( "http://yoururl.com" ), \IPS\Login::LOGIN_FRONT ); $member = \IPS\Login\Handler::findMethod( 'IPS\Login\Handler\Standard' )->authenticateUsernamePassword( $login, $username, $password ); This is a crude mockup and I haven't tested it, but hopefully it points you in the right direction.
June 30, 20186 yr Author Thanks! I didn't see your post until now as I didn't receive the expected email notification. I'll give your suggestion a whirl and get back to you. Kev
July 1, 20186 yr Author OK, so that code works straight out of the box in terms of validating the login credentials and returning a valid member object. But this bumps me to my next problem! I need to access the member's group (member_group_id) to determine what happens next, as only certain member groups are allowed to log in to the CMS. However, I can't seem to access this property, presumably because it's marked protected (my knowledge of PHP OOP is very slight indeed). Executing print_r on the member object shows me all the data, but I can't seem to access it programmatically. Is there any easy way around this? Kev
July 1, 20186 yr If you have the member object, you can use $member->group[‘column’] or you can load the group by using: $group = \IPS\Member\Group::load( $member->member_group_id );
July 2, 20186 yr $member->member_group_id will give you the group. All of the columns are available via a magic __get() method, so you can do $member->{$column_name}.
Archived
This topic is now archived and is closed to further replies.