После успешного входа в DEVISE, как перенаправить пользователя назад к предыдущему действию, которое требовало входа? - PullRequest
19 голосов
/ 09 августа 2011

У меня есть кнопка голосования ajax: если пользователь нажимает на изображение «thumbs up», но не вошел в систему, он должен увидеть диалоговое окно, которое просит его сначала войти в систему.

Чтобы сделатьВ этом диалоговом окне я использую jQuery и facebox, связанные с событием ajax: fail.Devise выдаст 401 Unauthorized, если пользователь не вошел в систему. Facebox загружает удаленный HTML-код для входа в систему во всплывающем диалоговом окне, представляющем форму входа DEVISE.

Все работает, кроме как после успешного входа в систему, пользовательперенаправлен на домашнюю страницу.Было бы более интуитивно понятно, если бы пользователь был перенаправлен обратно на сообщение, которое он просматривал, чтобы он мог продолжить свое голосование.

Есть ли лучший способ достижения такого поведения?

Спасибо.

Ответы [ 3 ]

19 голосов
/ 09 августа 2011

Я делаю следующее с Authlogic на Rails 3, возможно, вы могли бы использовать его или сделать что-то подобное:

class ApplicationController < ActionController::Base
  after_filter :store_location
private
  def store_location
    session[:return_to] = request.fullpath
  end

  def clear_stored_location
    session[:return_to] = nil
  end

  def redirect_back_or_to(alternate)
    redirect_to(session[:return_to] || alternate)
    clear_stored_location
  end
end

Затем вы можете использовать что-то вроде redirect_back_or_to dashboard_path в действии входа в систему.

Для некоторых контроллеров / действий я не хочу сохранять местоположение (например, страницу входа в систему).Для тех, кто просто пропускает фильтр:

class UserController < ApplicationController
  skip_after_filter :store_location
end

В вики Devise также есть страница о том, как это сделать: https://github.com/plataformatec/devise/wiki/How-To:-Redirect-to-a-specific-page-on-successful-sign-in

4 голосов
/ 01 ноября 2012

В ApplicationController напишите следующее:

after_filter :store_location
def store_location
  session[:previous_urls] ||= []
  # store unique urls only
  session[:previous_urls].prepend request.fullpath if session[:previous_urls].first != request.fullpath
  # For Rails < 3.2
  # session[:previous_urls].unshift request.fullpath if session[:previous_urls].first != request.fullpath 
  session[:previous_urls].pop if session[:previous_urls].count > 2
end
def after_sign_in_path_for(resource)
  session[:previous_urls].last || root_path
end

Источник: https://github.com/plataformatec/devise/wiki/How-To:-Redirect-back-to-current-page-after-sign-in,-sign-out,-sign-up,-update

0 голосов
/ 09 августа 2011

использовать куки.Получите файл window.location.href, к которому они пытаются перейти, и сохраните его как файл cookie.На вашей домашней странице проверьте наличие этой функции в функции готовности документа, перенаправьте, если она есть

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