2

I could really use some help with this.

BACKGROUND: I've got phpBB 3.0 installed and have working external authentication from my own site's database. My working is an implementation of this excellent worked example: https://github.com/nzeyimana/PhpBBAuthDbExt/blob/master/auth_dbext.php I now want to upgrade my Forum to 3.2 (current version).

PROBLEM: Trying to follow the example in the documentation https://area51.phpbb.com/docs/dev/32x/extensions/tutorial_authentication.html#authentication-providers and also phpBB community/viewtopic.php?f=461&t=2272371

I've copied the class file from the example documentation, calling it db2.php and placed in "ext/acme/demo/auth/provider/" I've also copied the service file from the example documentation, calling it services.yml and placed in "ext/acme/demo/config/"

Copies of both file contents at bottom below.

According to the documentation, I should then see db2 in the list of authentication methods in the Authentication part of Access Control Panel (ACP) - but nothing appears. I've flushed the forum cache, flushed my browsers cache etc, to no avail.

Am I missing something? Any help REALLY appreciated.

Kevin

This is the content of the db2.php file:

#
<?php

namespace acme\demo\auth\provider;

/**
 * Database authentication provider for phpBB3
 *
 * This is for authentication via the integrated user table
 */
class db2 extends \phpbb\auth\provider\base
{
    /** @var \phpbb\db\driver\driver_interface $db */
    protected $db;

    /**
     * Database Authentication Constructor
     *
     * @param \phpbb\db\driver\driver_interface $db
     */
    public function __construct(\phpbb\db\driver\driver_interface $db)
    {
        $this->db = $db;
    }

    /**
     * {@inheritdoc}
     */
    public function login($username, $password)
    {
        // Auth plugins get the password untrimmed.
        // For compatibility we trim() here.
        $password = trim($password);

        // do not allow empty password
        if (!$password)
        {
            return array(
                'status'    => LOGIN_ERROR_PASSWORD,
                'error_msg' => 'NO_PASSWORD_SUPPLIED',
                'user_row'  => array('user_id' => ANONYMOUS),
            );
        }

        if (!$username)
        {
            return array(
                'status'    => LOGIN_ERROR_USERNAME,
                'error_msg' => 'LOGIN_ERROR_USERNAME',
                'user_row'  => array('user_id' => ANONYMOUS),
            );
        }

        $username_clean = utf8_clean_string($username);

        $sql = 'SELECT user_id, username, user_password, user_passchg, user_pass_convert, user_email, user_type, user_login_attempts
            FROM ' . USERS_TABLE . "
            WHERE username_clean = '" . $this->db->sql_escape($username_clean) . "'";
        $result = $this->db->sql_query($sql);
        $row = $this->db->sql_fetchrow($result);
        $this->db->sql_freeresult($result);

        // Successful login... set user_login_attempts to zero...
        return array(
            'status'    => LOGIN_SUCCESS,
            'error_msg' => false,
            'user_row'  => $row,
        );
    }
}
#

This is the content of the services.yml file:

#
services:
    auth.provider.db2:
        class: acme\demo\auth\provider\db2
        arguments:
            - '@dbal.conn'
        tags:
            - { name: auth.provider }
#
GMDSS
  • 21
  • 1

1 Answers1

0

Unfortunately, the documentation is missing an important part - every extension should have its composer.json file in order to identify the extension - link.

You can refer to OneAll phpBB extension to see its structure and code. Use it as an example.

Once you have your composer.json, you should see you extension in the extension management list. Then enable your extension and you should see it in the Authentication section in your Access Control Panel (ACP)

I hope this helps.

Stanislav
  • 903
  • 2
  • 9
  • 14