- HTTP-авторизация и сопутствующие проблемы с Битриксом
- Алексей Емельянов
- Как отсортировать товары по популярности?
- Как связать приложение в битрикс через push and pull?
- Почему неправильно отображается страница работы с инфоблоками битрикс?
- Как использовать vue.js в битрикс?
- Экзамен №1. Вопросы и ответы по заданиям. Часть 2.
- Как решить проблему неработающей авторизации?
HTTP-авторизация и сопутствующие проблемы с Битриксом
Нашел баг, отловить быстро не получилось, поэтому пишу, дабы предостеречь вас.
Итак, наш разрабатываемый сайт закрыт от внешнего доступа http-авторизацией.
Если логин авторизации по http совпадает с логином с битриксе, а пароли разные, то залогиниться невозможно, пока логин не будет совершен другой машины, IP которой в доверенной зоне и не требует http-авторизации по политикам доступа (локальная сеть разработчиков).
Судя по логам события OnAfterUserLogin битрикс сначала обрабатывает http-авторизацию и использует в качестве логина/пароля лог/пас от http-авторизации. Пароли не совпадают и мы получаем сообщение ошибке — неверная пара логин/пароль.
Другой случай с http-авторизацией, когда пользователь в http-авторизации имеет туже пару логин/пароль, что и пользователь заведенный в битриксе. Такой пользователь не может разлогиниться, т.к. сразу после logout=yes файл include.php смотрит параметры http-авторизации, там остаются подходящие логин/пароль и пользователь снова логинится. Для юзера это выглядит, как будто кнопка «Выйти» просто обновляет страницу.
Детально я не разбирался, но судя по всему проблема в порядке определения условий в файле /bitrix/modules/main/include.php где-то в области комментария:
//http basic and digest authorization
По проблеме создал обращение в тех.поддержку (995761). Будет ли проблема исправлена и когда — пока неизвестно.
P.S. Чуть не поседел, пока с коллегой не нашли в чем дело
Источник
Алексей Емельянов
Как отсортировать товары по популярности?
Как связать приложение в битрикс через push and pull?
Пользователь подписыается на события связанные с объектом $dctList[‘UUID’]:
\CPullWatch::Add($UserID, $dctList[‘UUID’]);
Отправляем уведомление всем пользователям при событии связанным с объектом с индентификатором $list_uuid
Подписка на события в методе _pullinit:
Почему неправильно отображается страница работы с инфоблоками битрикс?
использую open server, решил проблему: в конфигурационном файле apache нужно закомментировать:
Должно получиться вот так:
Всё происходит из-за того, что apache блокировал подключение файлов с точкой в начале
Как использовать vue.js в битрикс?
Битрикс это фреймворк и CMS — короче бэкенд. Какое отношение он вообще имеет к фронту? Делайте его на Vue, на React, на чем хотите и используйте как хотите.
То что битрикс поддерживает Vue означает лишь то, что в набор библиотек js для битрикс добавлена Vue и теперь подключить ее к странице можно через API.
Кроме того встроенная библа помещена в объект BX и обращаться вы к ней должны так — BX.Vue + к ней добавлено несколько плюшек.
Но насколько я знаю в штатных шаблонах она нигде не используется и ее там никак использовать нельзя, так как все они оперируют с DOM, т.е. по сути несовместимы с реактивными библиотеками.
Но я бы не стал это использовать.
Вообще говоря есть некоторый конфликт Битрикс и Vue — с одной стороны шаблоны современных компонентов битрикс полностью заточены по функционалу и идеологии под реактивный фреймворк, с другой стороны их совершенно невозможно на них переписать, так как для них необходим серверный рендеринг ( что по крайней мере пока никак на битрикс не прикрутить) иначе вы останетесь без индексации, а какой-нибудь пререндер 80% пользователей Битрикс не осилит.
В итоге остается только мечтать о Vue в будущем, а пока в штатных компонентах рендерить на сервере HTML, а потом манипулировать DOM на клиенте, превращая в ад, кастомизацию штатных шаблонов.
Одним словом хотите использовать Vue с Bitrix — используйте, но забудьте о штатных шаблонах вообще. Да и Vue используйте свой, а не встроенный.
Источник
Экзамен №1. Вопросы и ответы по заданиям. Часть 2.
Цитата |
---|
Игорь Лузгачев написал: Но. это все точно не подразумевает создание отдельного шаблона для главной страницы. |
Добрый день
Вопрос
Документы – это множественное свойство типа «файл», загружаются только pdf документы.
Отображать оригинальное название файла, по клику на название – должен скачиваться файл.
Подразумевается
1 )
2) HTML5
3) написание своего кастомного скрипта для загрузки » download>
Или это остается на усмотрение разработчика = раз не указаны конкретные условия ??
Цитата |
---|
B24_13641687 написал: Или это остается на усмотрение разработчика = раз не указаны конкретные условия ?? |
Скорее так, но вариант
Цитата |
---|
B24_13641687 написал: 3) написание своего кастомного скрипта для загрузки » download> |
Добрый день
Вопрос
[ex1-7] Внедрить цепочку навигации
? Внедрить в шаблон сайта компонент, реализующий цепочку навигации.
Внедряь нужно и править шаблон или просто внедрить вызов компонента ?
ЗЫ вопрос вызван тем что при вызове компонента — верстка уезжает
Цитата |
---|
B24_13641687 написал: Добрый день Вопрос [ex1-7] Внедрить цепочку навигации ? Внедрить в шаблон сайта компонент, реализующий цепочку навигации. Внедряь нужно и править шаблон или просто внедрить вызов компонента ? |
B24_13641687, там все нормально с внедрением компонента, только сегодня при подготовке делал это задание.
Посмотри, может где-то теги какие-то лишние или, наоборот, недостающие 🙂
На экзамене было задание доработать форму авторизации. Встроить CAPTCHA которая будет показана при 2 неправильных попытках ввода логина и пароля. После экзамена попробовал решить задание но так и не смог добиться вывода капчи хотя в настройках было установлено после скольких попыток показывать её ну и капча также была встроена в код. Пробовал решить задание на чистом демо сайте. Спасибо
Комплексный экзамен Ex1AllType
Объясните пожалуйста по заданию [ex1-20] Реализовать авторизацию: типовые сценарии и соц.сети
Как я понял нужно создать страницу user.php в директории login. Путь /login/user.php
разместил компонент профиля в этом файле.
в шаблоне авторизации в метод action вывожу вместо стандартного
$APPLICATION->GetCurPageParam(); и удаляю ненужные параметры которые могут формироваться если авторизуюсь после забытого пароля.
Цитата |
---|
* выход; * переход на страницу с формой регистрации; * переход на страницу с формой восстановления пароля; * переход к профилю (/login/user.php) |
Цитата |
---|
Параметры для реализации сценариев: регистрация register=yes, восстановления пароля: forgot_password=yes, выход: logout=yes |
Цитата |
---|
/partneram/?register=yes |
Цитата |
---|
Lafotan написал: Он мне формирует не правильный url. получается сам шаблон мне не стоит менять. |
Что такое не правильный урл и какой правильный?
Цитата |
---|
Lafotan написал: как же мне тогда избавиться от BACKURL |
Цитата |
---|
Параметры для реализации сценариев: регистрация register=yes |
Добрый день (вечер).
Кто сомневается в своей скорости интернета при сдаче экзамена.
Сдавал первый экзамен.
Входящее соединение: 2.92 Мбит/с
Исходящее соединение: 0.86 Мбит/с
Разрешение самого монитора 1920х1200.
Настройки размера удаленного экрана оставил по умолчанию. (получилась горизонтальная полоса прокрутки)
Ни чего сильно тормозило и не зависало (кроме скролинга pdf файла с заданием), разрывов в соединении не было, времени хватило с запасом, что бы еще раз все проверить.
Так что всем удачи.
Здравствуйте. В условиях задания указано.
Шаблон создается один и для главной и для внутренних страниц.
Когда 2 шаблона понятно через условие index.php
А каким образом без внедрения компонента меню должен быть переход на внутренние страницы?
В соседней ветке вы давали ответ на похожий вопрос что это нужно сделать через условие if. Но как конкретно это сделать не понятно!
Цитата |
---|
Игорь Хлебников написал: А каким образом без внедрения компонента меню должен быть переход на внутренние страницы? |
[ex1-4] Создать шаблон сайта
Общие требования
? Создать шаблон сайта на основе предоставленной HTML верстки, папка html в архиве с
материалами.
? В этом задании создать только общий шаблон сайта, без внедрения в него компонентов!
Предоставленную верстку разделить на header, footer и контентную частью, создать шаблон
сайта, выполнить пункты задания.
? Шаблон создается один и для главной и для внутренних страниц.
? Задать ID шаблона: exam1, название шаблона: Экзамен N1
? Созданный шаблон применить для отображения по умолчанию для всего сайта.
? Шаблон создается один и для главной и для внутренних страниц. — Вот в этом заключается. Вопрос. Как в один шаблон это уместить.
[ex1-14] В верстке в разделе /rew/ присутствует вот такое левое меню http://joxi.ru/brRKOo8UQJMYPm . В описании экзамена о нем ни слова. Как реализовать его? Просто скопировать html-код из верстки? Или по-нормальному — делать левое меню в разделе со ссылками? Куда ведут ссылки? Должны ли пункты этого меню выпадать при наведении на Отзывы верхнего меню?
[ex1-6] Верхнее меню превращается в безобразную массу при включении режима правки http://joxi.ru/BA0Gel4IBJ91o2 . Считается ли это нарушением?
Цитата |
---|
Андрей Рязанцев написал: [ex1-14] В верстке в разделе /rew/ присутствует вот такое левое меню http://joxi.ru/brRKOo8UQJMYPm . В описании экзамена о нем ни слова. Как реализовать его? Просто скопировать html-код из верстки? Или по-нормальному — делать левое меню в разделе со ссылками? Куда ведут ссылки? Должны ли пункты этого меню выпадать при наведении на Отзывы верхнего меню? |
Левое меню на этой странице просто заглушка, как и шапка, и все что не относится к контентной части страницы.
Задание ex1-14 про реализацию контента страница отзывы, а шаблон и все в нем — это другие задания. Если вы будете делать задания по очереди , то и вопросов таких не будет
Цитата |
---|
Андрей Рязанцев написал: [ex1-6] Верхнее меню превращается в безобразную массу при включении режима правки http://joxi.ru/BA0Gel4IBJ91o2 . Считается ли это нарушением? |
я создаю вот такую структуру
root —
| — index.php
| — new_page.php
| — one.php
| — catalog
| — index.php
| — two.php
и вот на этих страницах
index.php
new_page.php
one.php
я не вижу заголовка
Источник
Как решить проблему неработающей авторизации?
Что делать если на каждый хит теряется авторизация? Простому пользователю проще будет написать в техподдержку. А разработчик сайта может сам легко продиагностировать эту проблему не дожидаясь ответа техподдержки. Для гуру веб разработок материал, возможно, будет не очень интересен. А для тех, кто хочет такими стать, предлагаю доступное изложение работы механизма авторизации.
Когда поступает обращение в техподдержку с такой проблемой, мы классифицируем его как простое. Потому что понимая механизм работы авторизации можно быстро локализовать проблему. В частых вопросах коротко описаны основные проблемы, хочу показать обоснование.
Как это работает
В своей основе технология веб сайтов (протокол HTTP) не предполагает идентификацию пользователей: соединение с сервером не поддерживается, каждый переход по страницам — новое подключение к веб серверу.
Чтобы различать запросы в php используется механизм сессий . Принцип следующий: при первом заходе на сайт посетителю присваивается уникальный идентификатор (идентификатор сессии, далее PHPSESSID), браузер сохраняет его у себя, сервер хранит некоторую информацию для этого идентификатора (например о том, что он авторизован). Затем при каждом новом переходе вся сохранённая информация (данные сессии) читаются интерпретатором php и передаются скрипту.
А значит проблемы начнутся когда: сервер не выдаст ID, клиент не сохранит ID или сервер не сохранит данные сессии.
PHPSESSID передаётся через заголовки HTTP — эта часть служебной информации, которая не показывается браузером. Для её просмотра нужно использовать специальные инструменты (бесплатные), самые популярные: прокси сервер Fiddler , плагины FireFox FireBug и livehttpheaders . Последний — простой плагин, которым я воспользуюсь для иллюстрации вопроса.
Через меню инструменты делаю открываю окно «Live HTTP Headers» и делаю первый хит на сайт (все куки очистил):
Подсветкой выделил ключевую строку (часть идентификатора скрыл с тем чтобы у особо пытливых читателей не было соблазна ходить под моей сессией).
Здесь сервер указал, что мне следует сохранить в куки PHPSESSID. Если этого не произошло — дальше ничего не пойдёт. Верный признак проблемы: в заголовке нет ни одной записи Set-Cookie . В подавляющем большинстве случаев это говорит о том, что до старта сессии был вывод на экран. После этого php не может изменить заголовки HTTP. Типичный пример из файла /bitrix/php_interface/dbconn.php :
Также надо обратить внимание на файл init.php в этой папке, к нему те же требования.
Может быть ситуация, когда проблема в настройках сервера, это легко проверить нашим скриптом: bitrix_server_test.php (чтобы сессии работали на сервере нужна поддержка сессий в php, указана папка сохранения сессий и у php были права на запись в эту папку).
Работа с куками
Кука была сохранена, то на следующий хит браузер должен передать PHPSESSID на сервер.
Редко встречаются проблемы в работе браузеров, чаще идентификатор не передаётся в результате неправильного сохранения . Поясню. На прошлом изображении в строке Set-Cookie есть запись:
domain=1c-bitrix.ru . Она определяет, на какой домен будет распространяться кука. Для браузеров действуют простые правила безопасности:
— нельзя сохранить куку в другом домене . Например, сайт 1c-bitrix.ru не может выставить куку для домена mail.ru , если домен не будет соответствовать — она просто будет отброшена;
— куки из верхнего домена распространяются на поддомены. Например, указали 1c-bitrix.ru , открываем dev.1c-bitrix.ru или www.1c-bitrix.ru — кука должна передаваться. Наоборот не будет работать: кука домена www.1c-bitrix.ru не подхватится на 1c-bitrix.ru .
— если не указан домен — кука привязывается к текущему домену, но не распространяется на поддомены .
Битрикс указывает домен в куки из настроек сайта. А значит убедитесь, что в настройках сайта указаны правильные домены (поле Доменное имя ).
На этот и все последующие хиты в ответе сервера кука PHPSESSID не должна выдаваться:
Если браузер передал PHPSESSID, а сервер всё равно выдал новый, значит он либо не сохранил сессию у себя (проверить папку и права на неё, часто бывает неправильно указан путь в windows, используются обратные слешы \ вместо прямых / ) либо сессия истекла и сервер её удалил (между хитами должно пройти какое-то время).
Если тест сервера показывает, что сохранение сессий работает, сессии PHPSESSID сохраняется и передаётся, но авторизация всё равно теряется, значит проблема в настройках битрикса. Приходилось сталкиваться с ситуацией, когда интернет-провайдер периодически меняет IP адрес клиента, тогда срабатывает настройка привязки к IP в настройках безопасности группы пользователей. В этом случае следует установить привязку 0.0.0.0 .
Это основные проблемы, встречаются экзотические ситуации, но очень редко. Большинство проблем с авторизацией, а также сохранением данных с ошибкой Ваша сессия истекла или Ошибка безопасности диагностируются как показано здесь.
Источник