2016-01-26 3 views
1

Я хотел бы добавить параметры в путь, возвращенный в моей функции after_sign_in_path_for. Когда пользователь не аутентифицирован и не отправляет форму, я сохраняю параметры, и мой сайт перенаправляет его в форму.Добавить параметры в after_sign_in_path_for

def create 
    if current_user.nil? 
     session[:form_data] = params 
     redirect_to new_user_registration_path  
    else 
     # here I handle form params 
    end 
end 

Затем пользователь входит в систему, и вот моя after_sign_in_path_for функция.

def after_sign_in_path_for(resource) 
     if session[:form_data].present? 
      '/transactions#create' 
     else 
      session[:previous_url] || root_path 
     end 
    end 

Если session[:form_data] существует, то я хотел бы перенаправить его на сделки # создать, но с session[:form_data] содержимого в качестве параметров.

Я попытался использовать redirect_to, но он выдает исключение, так как функция разработки, вызывающая after_sign_in_path_for, также вызывает redirect_to.

Есть ли способ сделать это?

ответ

0

Вопрос здесь, если вам нужно - перенаправления GET запросов. Ваше действие create должно отвечать только на запрос POST, поскольку запрос GET хранится в истории браузера и может быть непреднамеренно повторен.

Что вы можете сделать вместо этого перенаправлять transactions#new и использовать Params, чтобы предварительно заполнить форму:

def new 
    @transaction = Transaction.new(new_transaction_params) 
end 

def new_transaction_params 
    params.fetch(:transaction, {}) 
     .permit(:a, :b, :c) 
end 

def after_sign_in_path_for(resource) 
    if session[:form_data].present? 
    new_transaction_path(query: session[:form_data]) 
    else 
    session[:previous_url] || root_path 
    end 
end 

Но если вы сохранили данные формы в сессии в любом случае там нет необходимости передавать его через параметры. Фактически параметры отправки в строке запроса несколько менее безопасны.

Это предполагает, что вы настроили маршруты с:

resources :transactions 
+0

Спасибо. Но мне нужно найти способ представить эту информацию, не возвращаясь к этой форме. Я думаю, что стирание сеанса [: form_data] после его использования не позволит пользователям непреднамеренно отправлять данные. – Shrolox

Смежные вопросы