Нежелательное перенаправление после аутентификации - PullRequest
1 голос
/ 12 мая 2010

У нас есть форма для представления оценок для определенного ресторана в наших представлениях / restaurant / show.html.erb. Мы хотим, чтобы только зарегистрированные пользователи создавали новые рейтинги. Мы ставим

before_filter: login_required,: only => [: new,: create]

(но мы также пробовали только ": создать") поверх нашего RatingsController. Если мы нажмем кнопку «Отправить» после ввода подробной информации о рейтинге, нам будет предложено войти в систему (что мы и хотим). После заполнения имени пользователя и пароля и отправки формы авторизации мы перенаправлены обратно на e. г. / рестораны / 36 / рейтинги, но мы хотим, чтобы нас перенаправили обратно туда, откуда мы пришли - э. г. / Рестораны / 36 /. Мы попытались redirect_to (: back), но это перенаправляет нас обратно в форму входа. Также новый рейтинг не сохраняется в базе данных.

Есть идеи, как мы можем изменить перенаправление и как сохранить рейтинг?

Спасибо!

1 Ответ

1 голос
/ 12 мая 2010

Отказ от ответственности: Я не использую restful-authentication. (Вы можете заглянуть в authlogic, если у вас есть выбор - есть Railscast об этом , если вы хотите вступление.) Несмотря на это, сохранение значения "back" в сеансе должно все же сработать. Вот что я делаю в своей ситуации:

# app/controllers/application.rb

before_filter :authorize

protected

  # Override in controller classes that should NOT require authentication (such as logging in, by definition)
  def require_login?
    return true
  end

private

  def authorize
    if require_login? && current_user.nil?
      session['return_to'] = request.request_uri
      redirect_to login_url

      return false
    end
  end

# app/controllers/user_sessions_controller.rb

def create
  # [...]

  if @user_session.save
    flash[:notice] = 'Successfully logged in.'

    if session['return_to'].nil?
      redirect_to root_url
    else
      redirect_to session['return_to']
    end
  else
    render :action => 'new'
  end
end

# app/controllers/users_controller.rb

# Just as an example:
def require_login?
  return case action_name
  when 'new'
    false
  when 'create'
    false
  else
    true
  end
end

Моему приложению требуется почти каждое действие для аутентификации, поэтому у меня require_login? return true. Я думаю, что вы могли бы приспособить идею session['return_to'] к вашим потребностям.

Я думаю, что я получил часть этой идеи из этого поста: http://www.urubatan.info/2007/10/a-very-simple-login-example-with-rails/

...