Перенаправление после входа в исходную задачу - PullRequest
2 голосов
/ 19 марта 2011

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

У меня есть эти методы в application_controller.rb

Это называется before_filter в месте, на которое ссылается URL, ловит, что пользователь не должен находиться там, где он пытается пойти, и сохраняет намерение

    def user_in_beta
    unless user_signed_in? && current_user.beta
      if user_signed_in?
        redirect_to :home_betawait
      else 
        session[:original_uri] = request.request_uri
        redirect_to new_user_session_path
      end
    end
  end

И это должно поймать его после того, как он войдет в систему и вернуть его туда, где он должен.

def after_sign_in_path_for(resource_or_scope)
    if current_user.beta
      if session[:original_uri].nil?
        :home_index
      else
        session[:original_uri]
      end
    else :home_betawait
    end
  end

Однако это не так. Вместо этого я получаю очень неприятный "не могу перенаправить на ноль!" Если я читаю это в локальную переменную и сохраняю, все больше вещей ломаются. Я очень сбит с толку, это должно быть очень распространенным занятием.

1 Ответ

4 голосов
/ 19 марта 2011

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

Такое поведение уже предоставлено Devise authenticate_user! до_фильтра.Поскольку ваш тег "devise" в этой истории и использование user_signed_in? предполагают, что вы уже используете Devise, зачем изобретать собственное решение?

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