2014-04-05 3 views
0

Я пишу приложение iOS, которое отображает контент с сайта, управляемого Drupal. Я понял, как я могу создавать представления в Drupal для доставки контента в JSON в приложение. Но теперь я хочу, чтобы мои зарегистрированные пользователи регистрировали контент в качестве избранных. Пользователи могут создавать учетную запись на веб-сайте и также могут войти в приложение. Избранное хранится для каждого пользователя.Содержимое флага в Drupal через внешний HTTP-запрос

В Drupal это реализовано с использованием Flag module, который отображает соответствующие ссылки для переключения флагов на веб-сайт. Эти ссылки указывают на определенный URL-адрес, который также содержит токен, чтобы предотвратить спуфинг. Вызов URL-адреса без токена приводит к отказу доступа.

Теперь, к сожалению, я не могу сгенерировать эти токены в своем приложении. Есть ли способ разместить контент без использования веб-сайта?

Я новичок в Drupal. Все, что мне нужно, это в основном намек на то, как реализовать собственные HTTP-API, которые позволяют внешним программам манипулировать контентом.

ответ

0

Оказывается, мне пришлось написать свой собственный модуль, который предоставляет запись обратного вызова меню. Мой favorites_api.module файл выглядит следующим образом:

/** 
* Implements hook_menu(). 
*/ 
function favorites_api_menu() { 
    $items['node/%/favorite/%'] = array(
     'title' => 'Mark as favorite', 
     'page callback' => 'favorites_api_toggle_favorite', 
     'page arguments' => array(1, 3), 
     'access callback' => 'user_access', 
     'access arguments' => array('access content'), 
     'type' => MENU_CALLBACK, 
    ); 

    return $items; 
} 

/** 
* Callback for above menu entry 
*/ 
function favorites_api_toggle_favorite($entity_id, $action) { 
    $favorites_flag = flag_get_flag('favorites') or die('no "favorites" flag defined'); 
    $favorites_flag->flag($action, $entity_id); 

    // error handling and return message 
    // ... 
} 

Теперь я могу назвать http://myurl/node/3/favorite/flag отметить узел 3 в качестве любимых и http://myurl/node/3/favorite/unflag к пометке его.

Имея, чтобы написать МЕНЮ запись, чтобы создать действие пользовательских URL немного вводит в заблуждение, хотя ...

0

Скачать и включить модуль «сеанса апи» (https://drupal.org/project/session_api).

Как сказал при создании/редактирования модуля флага в разделе «Доступ» Флаг: МОЕ содержание

Анонимных пользователей флага, если модуль Session API является установлен.

Каждые анонимные пользователи будут иметь один и тот же маркер (строка 2358 в файле «flag.module»):

md5(drupal_get_private_key() . $entity_id) 

Вы можете построить этот маркер в вашем приложении, если вы можете получить лица/узел id (закрытый ключ может быть установлен и установлен в конфигурации Drupal).

Редактировать: вам нужно будет добавить разрешение для вашего имени флага для анонимного пользователя в разрешениях. список

+0

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

+0

Да, я соглашаюсь на хранение секретного ключа, не так безопасно ... Далее работает код в вашем собственном ответе? Я имею в виду, что вы должны войти в систему, чтобы это сработало. – progzy

+0

Да, он работает, если пользователь вошел в систему - как и предполагалось. –

Смежные вопросы