Drupal 8. Форма авторизации

Аватар пользователя symbians60v5 symbians60v5 2 апреля в 11:49

Здравствуйте. Возникла довольно непонятная для меня проблема. Есть модальная форма авторизации. Заполняем логин и пароль - логинимся. Все ок. Потом выходим. Опять открываем форму авторизации. Вводим логин, пароль - логинимся. В меню пользователя видим имя и аватарку предидущего пользователяю При этом при переходе в профиль пользователя мы увидим данные нового юзера. Я не могу понять почему авторизация так работает. Помогите( идей за день не появилось. Заранее спасибо.

Функция которая собирает данные в меню после авторизации

<?php
  
private function getUser()
  {
    
/** @var \Drupal\user\UserInterface $user */
    
$user User::load($this->account->id());

    

$currentAccount = \Drupal::currentUser();
    
$picture '/' drupal_get_path('module''wa_account') . '/image/1@100x.png';
    if (
$user->hasField('user_picture') && !$user->get('user_picture')->isEmpty()) {
      
$picture ImageStyle::load('profile_picture')->buildUrl($user->user_picture->entity->getFileUri());
    }

    return [
      

'picture' => $picture,
      
'name' => (empty($user->field_user_first_name->value) && empty($user->field_user_surname->value)) ? $user->name->value trim($user->field_user_first_name->value ' ' $user->field_user_surname->value),
    ];
  }

?>
0 Thanks

Комментарии

Аватар пользователя marassa marassa 2 апреля в 12:31
1

Скорее всего дело в кэшировании - "меню пользователя" генерируется при заходе первого пользователя, кэшируется и потом готовый блок отдается второму пользователю. Нужно добавить $vars['#cache']['contexts'][] = 'user'; в рендер-массив нужного блока. Вот как я решил эту проблему на своём сайте (но если у вас речь идет о другом блоке или меню, то нужно будет подправить):

/**
 * Implements hook_preprocess_HOOK() for block.html.twig.
 */

function MYMODULE_preprocess_block(&$vars) {
  if($vars['derivative_plugin_id'] == 'account') {
    $vars['#cache']['contexts'][] = 'user';
  }
}