Здравствуйте. Возникла довольно непонятная для меня проблема. Есть модальная форма авторизации. Заполняем логин и пароль - логинимся. Все ок. Потом выходим. Опять открываем форму авторизации. Вводим логин, пароль - логинимся. В меню пользователя видим имя и аватарку предидущего пользователяю При этом при переходе в профиль пользователя мы увидим данные нового юзера. Я не могу понять почему авторизация так работает. Помогите( идей за день не появилось. Заранее спасибо.
Функция которая собирает данные в меню после авторизации
<?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),
];
}
?>
Комментарии
Скорее всего дело в кэшировании - "меню пользователя" генерируется при заходе первого пользователя, кэшируется и потом готовый блок отдается второму пользователю. Нужно добавить
$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';
}
}