Обновление 1.0.9: авторизация во фронтенде
10 июля 2012Сегодня мы выпустили значимое системное обновление фреймворка. В ядре фреймворка появился механизм, который позволяет разработчику приложения довольно просто добавить во фронтенд возможность регистрации и входа для пользователей. Хранение данных о зарегистрированных пользователях осуществляется приложением «Контакты», а ядро фреймворка предоставляет интерфейсы для подключения форм регистрации и входа в шаблонах дизайна приложения (аналогично капче).
Регистрация и вход для пользователей на сайте включается в приложении «Сайт» в настройках сайта:
Включив регистрацию для сайта и выбрав приложение, в контексте которого должны работать формы авторизации, администратор включает на сайте возможность регистрации для посетителей (оформление форм авторизации зависит от приложения и поэтому подключаются на сайте не на системном уровне, а на уровне приложения; система предоставляет готовые инструменты для удобного подключения этих форм внутри приложения, но определить подходящее место для их внедрения должен разработчик приложения).
Зарегистрироваться можно и через внешние сервисы. Во фреймворке реализованы адаптеры авторизации для Фейсбука, Твиттера, Вконтакта и Гугла.
В данный момент (в этом обновлении) поддержка регистрации реализована в приложении «Блог». На его примере можно посмотреть и попробовать, как работает регистрация пользователей. В общих настройках «Блога» включите опцию «Только зарегистрированные пользователи могут оставлять комментарии», и тогда все посетители, которые оставляют комментарии, должны будут зарегистрироваться на вашем сайте, а пользователи бекенда смогу управлять списком зарегистрированных пользователей с помощью приложения «Контакты».
Документация для разработчиков по подключению авторизации в приложениях пока не опубликована, но будет предоставлена в самое ближайшее время. Также как и обновление приложения «Контакты», в котором появится отдельная фильтрация пользователей по связанным приложениям.
Важная информация для пользователей приложения «Блог»
Если вы не редактировали шаблоны дизайна блога, то есть фронтенд блога работает на основе оригинала темы дизайна из 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>
14 комментариев
Спасибо!
ответитьЖдали с нетерпением, вопрос только один. Ковырять Ваши приложения для изучения метода авторизации в своих приложениях, или будет отдельная нормальная документация, как и по всем остальным функциям.
Вопрос снят. Не заметил курсив с ответом на мой вопрос!
ответитьСпасибо еще раз за это хорошее дело!
После обновлений появилась ошибка #1054 в бекенде. Через каждые N секунд, все исчезает и появляется надпись:
ответитьQuery Error
Query: SELECT id, post_id FROM blog_comment WHERE (datetime > '2012-07-10 20:06:05') AND (contact_id != 1) AND (blog_post.contact_id = 1) AND (`status` = 'approved') AND (`blog_id` IN ('1','4','3','5'))
Error: 1054
Message: Unknown column 'blog_post.contact_id' in 'where clause'
Please contact app developer.
Спасибо, что сообщили. Ошибку исправили, можно обновиться.
ответитьПроявлялась, когда в настройках счетчика на иконке было указано подсчитывать число комментариев только к собственным записям.
При входе в бекенд ссылка "Забыли пароль?" ведет на 404
ответитьХотя возможно, это я что-то не правильно сделал?
При регистрации через твиттер имени нет, в приложение контакты появляются множество - <Без имени>
ответитьСпасибо. Исправили. Обновитесь, должно всё заработать.
ответитьПосле установки этого обновления при заходе в запись блога во фронтэнде отображаются только сами записи без шапки и футтера. html-код начинается:
ответить<script type="text/javascript">
$.blog = {};
и заканчивается:
<li data-provider="facebook" ><a href="#" onclick="return $.blog.oauth('facebook');"><img src="
Вы пост прочитали? Там написано что нужно сделать (некоторые переменные поменялись). Если вы не сильно меняли тему, то проще всего просто её сбросить до дефолтной (приложение сайт - раздел темы).
ответитьХотелось бы узнать, а почему нельзя передать форму регистрации и логина приложению "сайт"?!!!
ответитьСогласитесь,не предоставить возможность этого делать, а логиниться и регистрироваться НЕ в корневом каталоге-бред.
А какой смысл регистрироваться на сайте? Там нельзя оставлять комментарии и вообще ничего нельзя делать. Зачем там регистрироваться?
ответитьРегистрация будет иметь смысл там где можно будет что-то делать авторизованным пользователям, например, в блоге. И тогда логично, чтобы регистрация была именно там.
Сами подумайте, может быть сайт,где одновременно работают и приложение "блог" и приложение "фото". Посетитель находится в приложении фото и хочет авторизоваться, после чего его почему-то кидает в "блог",где он авторизуется и после этого возвращается в необходимое ему приложение или получается все в точности, да наоборот, в зависимости от настроек.
ответитьЯ считаю,что необходимо хотя бы в функционале предусмотреть вынос регистрации и авторизации в корень доменного имени.
Спасибо за ваше предложение.
ответить(На самом деле мы уже давно этот вопрос обсудили и решили, что сделаем в "Сайте" возможность регистрации. Будет уже в следующем обновлении. Скоро.)
После авторизации пользователя должно редиректить туда откуда он пришёл. Если он был в фото, то значит в фото, если в блоге, то в блог.
ответитьВозможно сейчас есть какой-то баг. Проверим и исправим, если это там. Ну и как написали выше в ближайшем обновлении всё будет.