Разработать аутентификацию пользователя для запросов AJAX - PullRequest
3 голосов
/ 10 августа 2011

Каков наилучший способ обработки перенаправлений в вызове AJAX, который требует пользователей (через устройство)? Я хотел сделать что-то вроде:

$('#love').click(function() {
  $.get('/item/#{item.id}', function(data) {
    if (data.redirect) { window.location.replace(data.redirect); return; }
  }); 
});

Однако я не уверен, как получить устройство до того, как фильтр (аутентифицирует пользователя) обработает формат запроса 'js'. Есть идеи?

Ответы [ 2 ]

3 голосов
/ 10 августа 2011

У устройства есть специальная опция только для этого: http_authenticatable_on_xhr Вы можете найти этот вопрос актуальным.

Кроме того, я действительно советую не использовать перенаправления с запросами XHR. Вы окажетесь в мире боли, как только попробуете использовать его с Firefox. До Gecko 7.0 Firefox не сохранял заголовки из исходного запроса при перенаправлении XHR.

По данным developer.mozilla.org Страница XMLHttpRequest:

Из заголовков Gecko 7.0, установленных setRequestHeader (), отправляются с запросом при перенаправлении. Ранее эти заголовки не отправлялись.

2 голосов
/ 10 августа 2011

Вы можете сделать что-то подобное в своем файле ApplicationController для перенаправления через AJAX:

  # allows redirecting for AJAX calls as well as normal calls
  def redirect_to(options = {}, response_status = {})
    if request.xhr?
      render(:update) {|page| page.redirect_to(options)}
    else
      super(options, response_status)
    end
  end

По сути, если запрос сделан через AJAX и действие контроллера (или before_filter) говорит о перенаправлении на страницу входа, это перенаправит страницу для этого вызова AJAX.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...