Обновление 1.0.9: авторизация во фронтенде

Сегодня мы выпустили значимое системное обновление фреймворка. В ядре фреймворка появился механизм, который позволяет разработчику приложения довольно просто добавить во фронтенд возможность регистрации и входа для пользователей. Хранение данных о зарегистрированных пользователях осуществляется приложением «Контакты», а ядро фреймворка предоставляет интерфейсы для подключения форм регистрации и входа в шаблонах дизайна приложения (аналогично капче).

Регистрация и вход для пользователей на сайте включается в приложении «Сайт» в настройках сайта:

Включив регистрацию для сайта и выбрав приложение, в контексте которого должны работать формы авторизации, администратор включает на сайте возможность регистрации для посетителей (оформление форм авторизации зависит от приложения и поэтому подключаются на сайте не на системном уровне, а на уровне приложения; система предоставляет готовые инструменты для удобного подключения этих форм внутри приложения, но определить подходящее место для их внедрения должен разработчик приложения).

Зарегистрироваться можно и через внешние сервисы. Во фреймворке реализованы адаптеры авторизации для Фейсбука, Твиттера, Вконтакта и Гугла.

В данный момент (в этом обновлении) поддержка регистрации реализована в приложении «Блог». На его примере можно посмотреть и попробовать, как работает регистрация пользователей. В общих настройках «Блога» включите опцию «Только зарегистрированные пользователи могут оставлять комментарии», и тогда все посетители, которые оставляют комментарии, должны будут зарегистрироваться на вашем сайте, а пользователи бекенда смогу управлять списком зарегистрированных пользователей с помощью приложения «Контакты».

Документация для разработчиков по подключению авторизации в приложениях пока не опубликована, но будет предоставлена в самое ближайшее время. Также как и обновление приложения «Контакты», в котором появится отдельная фильтрация пользователей по связанным приложениям.

Важная информация для пользователей приложения «Блог»

Если вы не редактировали шаблоны дизайна блога, то есть фронтенд блога работает на основе оригинала темы дизайна из wa-apps/blog/themes/default, тогда ничего делать не надо — обновление само заменит оригиналы шаблонов дизайна, и блог будет продолжать работать.

Если же вы редактировали шаблоны дизайна блога с помощью приложения «Сайт», то ваша измененная копия темы была сохранена в wa-data/public/blog/themes/default/. При обновлении «Блога» ваши изменения не будут затронуты, поэтому может потребоваться выполнить некоторые изменения в шаблонах дизайна вручную. Пожалуйста, внимательно посмотрите, все ли продолжает работать во фронтенде блога, и если что-то вдруг перестало работать, замените в шаблонах дизайна старые переменные на новые, как описано ниже.

Во-первых, если вы хотите включить авторизацию во фронтенде блога, то после установки обновления нужно скопировать новые файлы темы дизайна signup.html, login.html, forgotpassword.html из папки с оригиналом темы wa-apps/blog/themes/default в папку с вашими файлами wa-data/public/blog/themes/default/. Скопировать можно либо по FTP (с последующей установкой прав на запись для этих файлов), либо создав в вашей теме дизайна в приложении «Сайт» шаблоны с вышеуказанными названиями файлов и содержимым, как в оригинальных файлах.

В CSS-файл вашей темы скопируйте набор классов из секции «Sign up & Login forms» оригинального default.css.

Во-вторых, в теме дизайна блог были упразднены несколько переменных:

$is_concrete_blog — рекомендуется заменить на условие $wa->param('blog_url')?true:false
$layout_type — рекомендуется использовать пару переменных $is_lazy_loading и $page (см. оригинал темы default
$post.comment_str_translate - вместо этого необходимо использовать целую конструкцию. В потоке:

{if !empty($post.comment_count)}
    {_w('%d comment','%d comments',$post.comment_count)}
{else}
    нет комментариев
{/if}

В отдельном посте:

<h3 class="comment-count" {if $post.comment_count == 0}style="display: none;"{/if}>
    {_w('%d comment','%d comments',$post.comment_count)}
</h3>

Так же требуется отдельно добавить подключение jQuery в явном виде в шаблоне index.html перед всеми остальными JS-скриптами:

<script type="text/javascript" src="{$wa_url}wa-content/js/jquery/jquery-1.7.1.min.js"></script>

Кроме того, во избежание двойного экранирования данных убрать использование модификатора escape в шаблонах, данные, которые необходимо экранировать от использование HTML-тегов, уже преобразованы до передачи в шаблоны.

Если у вас есть вопросы, пожалуйста, задавайте их в комментариях.

UPD: Дополнение по поводу шаблона comments.html и адаптеров авторизации. Изменилось перечисление адаптеров авторизации:

— вместо {foreach $auth_adapters as $name => $adapter} теперь используется {foreach $auth_adapters as $adapter}
— {$name} заменяется на {$adapter->getId()}
— вместо {$adapter.photo_url_20|default:$adapter.photo_url|default:"`$wa_url`wa-content/img/userpic20.jpg"} используется {$adapter->getIcon()}
— вместо {$adapter.name} используется {$adapter->getName()}
— ссылку <a href="#" onclick="return $.blog.oauth('{$name}');"><img src="{$adapter.photo_url_20|default:$adapter.photo_url}" alt="">{$adapter.name}</a> нужно заменить на такую:
<a href="{$adapter->getCallbackUrl(0)}&app=blog"><img src="{$adapter->getIcon()}" alt="">{$adapter->getName()}</a>

Так же обновился JS-скрипт в этом шаблоне:

<script type="text/javascript">
$(document).ready(function() {
    $("#user-auth-provider a").click(function () {
        var left = (screen.width-600)/2;
        var top = (screen.height-400)/2;
        window.open($(this).attr('href'){if !$request_authorization} + "&guest=1"{/if},'oauth', "width=600,height=400,left="+left+",top="+top+",status=no,toolbar=no,menubar=no");
        return false;
    })
});
</script>