2015-04-07 2 views
0

В проекте Angular.js, где я использую ng-token-auth для аутентификации пользователя, я хочу интегрировать Twitter Typeahead.js.Используйте ng-token-auth toghether с typeahead/bloodhound

Я построил директиву, где содержание функции ссылки:

link: (scope, element, attrs) -> 
     hs_list = new Bloodhound({ 
      datumTokenizer: Bloodhound.tokenizers.obj.whitespace('hs8'), 
      queryTokenizer: Bloodhound.tokenizers.whitespace, 
      remote: 'api/trainings/hs_list?q=%QUERY' 
     }) 
     hs_list.initialize() 
     element.typeahead(null, { 
      name: 'hs-mapping-id', 
      displayKey: 'hs8', 
      source: hs_list.ttAdapter(), 
      templates: { 
      empty: [ 
       '<div class="empty-message">', 
       'We cannot find this training', 
       '</div>' 
      ].join('\n'), 
      suggestion: Handlebars.compile('<p class="clearfix"><strong>{{hs8}}</strong> &mdash; {{hs8_text}}<br /><span style="display:inline-block; height: 22px; overflow: hidden; white-space:nowrap; text-overflow:ellipsis; max-width: 400px;">{{hs6_text}}</span></p>') 
      } 
     }) 
     .bind('typeahead:opened', -> 
      $(this).data('ttTypeahead').dropdown.$menu.addClass('overflow-hidden').perfectScrollbar() 
     ) 
     .on 'keyup', -> 
      $(this).data('ttTypeahead').dropdown.$menu.perfectScrollbar('update') 

Когда я пытаюсь использовать его, я получаю несанкционированное перенаправление доступа, поскольку заголовки аутентификации отсутствует Bloodhound запросов. Каким образом можно добавить заголовки заголовков в запрос?

ответ

0

Хорошо, я нашел ответ!

нг-маркера аутентификации обеспечивает помощника, который возвращает заголовки для ajax settings object:

$ auth.retrieveData ('') auth_headers

Поэтому для того, чтобы использовать его с Bloodhound, все мы должны сделать это:

angular.module('app').directive 'trainingsList', ($auth) -> 
    return { 
     restrict: 'A' 
     link: (scope, element, attrs) -> 
     hs_list = new Bloodhound({ 
      datumTokenizer: Bloodhound.tokenizers.obj.whitespace('hs8'), 
      queryTokenizer: Bloodhound.tokenizers.whitespace, 
      remote: 
      url: 'api/trainings/hs_list?q=%QUERY' 
      ajax: 
       headers: $auth.retrieveData('auth_headers') 

     }) 
     hs_list.initialize() 
     element.typeahead(null, { 
      name: 'hs-mapping-id', 
      displayKey: 'hs8', 
      source: hs_list.ttAdapter(), 
      templates: { 
      empty: [ 
       '<div class="empty-message">', 
       'We cannot find this training', 
       '</div>' 
      ].join('\n'), 
      suggestion: Handlebars.compile('<p class="clearfix"><strong>{{hs8}}</strong> &mdash; {{hs8_text}}<br /><span style="display:inline-block; height: 22px; overflow: hidden; white-space:nowrap; text-overflow:ellipsis; max-width: 400px;">{{hs6_text}}</span></p>') 
      } 
     }) 
     .bind('typeahead:opened', -> 
      $(this).data('ttTypeahead').dropdown.$menu.addClass('overflow-hidden').perfectScrollbar() 
     ) 
     .on 'keyup', -> 
      $(this).data('ttTypeahead').dropdown.$menu.perfectScrollbar('update') 
    }; 
Смежные вопросы