Warning: Undefined array key "HTTPS" in include() (line 29 of /opt/www/fdv2/drupal.stage/web/sites/default/settings.local.php).
include('/opt/www/fdv2/drupal.stage/web/sites/default/settings.local.php') (Line: 4)
require('/opt/www/fdv2/drupal.stage/web/sites/drupal001.net/settings.php') (Line: 145)
Drupal\Core\Site\Settings::initialize('/opt/www/fdv2/drupal.stage/web', 'sites/drupal001.net', Object) (Line: 1099)
Drupal\Core\DrupalKernel->initializeSettings(Object) (Line: 701)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
Drupal 8 里面如何自定义认证用户? - Drupal大学 - Drupal问答论坛
首页 / 帖子
Drupal 8 里面如何自定义认证用户?

Drupal8里面的用户认证,比如类似Drupal7里面的hook_user_login怎么写?

1个答案
发布于:2018-01-17 17:56

1. 创建一个自定义的ServiceProvider,修改默认的user.auth的service的class,改成自定义的

namespace Drupal\mymodule;
use Drupal\Core\DependencyInjection\ContainerBuilder;
use Drupal\Core\DependencyInjection\ServiceProviderBase;
use Symfony\Component\DependencyInjection\Reference;
/**
 * Class MyModuleServiceProvider.
 *
 * @package Drupal\mymodule
 */class MyModuleServiceProvider extends ServiceProviderBase {

  /**
   * {@inheritdoc}
   */
  public function alter(ContainerBuilder $container) {
    $definition = $container->getDefinition('user.auth');
    $definition->setClass('Drupal\mymodule\UserAuth');
    $definition->setArguments(
      [
        new Reference('entity.manager'),
        new Reference('password'),
        new Reference('language_manager'),
        new Reference('logger.factory'),
        new Reference('mymodule.netforum_client'),
      ]
    );
  }}

2. 再在这个类里面写自定义认证过程(这个类也可以集成默认的UserAuth)

class FdUserAuth extends UserAuth 
{
  public function authenticate($username, $password) {
     if($username == xx) {...}
  }
}