根据sign_in参数重定向用户

时间:2017-02-23 09:02:45

标签: ruby-on-rails devise

我想基于他们用来签名的参数来重定向用户但是我没有找到方法。

用户从/users/sign_in/?demo=car

登录

Users :: SessionsController<设计:: SessionsController

def create
 super
 # get the params
 if params[:demo] == car
  # redirect_to where_ever
 end
end

显然这不起作用。

正确的重定向:

ApplicationController<的ActionController ::基

def after_sign_in_path_for(resource)
 # I must have params[:demo] here. How?
 if params[:demo] == car
  # go elsewhere
 else
  request.env['omniauth.origin'] || stored_location_for(resource) || root_path
 end
end 

很长的方法是使用params更新用户的列然后在after_sign_in_path_for我检查current_user列中的参数然后重定向。如果用户来自原始网址,我会将列更新为""。浪费时间,对吗?

1 个答案:

答案 0 :(得分:-1)

进行先前操作以设置@redir。如果您需要保留beetwen页面重定向,请存储在您的会话中

 class ApplicationController < ActionController::Base

   before_action :set_redir, if: -> { params[:redir].present? }

   def set_redir
     @redir = CGI.unescape(params[:redir])
     session[:redir] = @redir
   end

   def after_sign_in_path_for(resource)
     session[:redir] || request.env['omniauth.origin'] || stored_location_for(resource) || root_path
   end

 end

会话表格

<%= form_for(resource, :as => resource_name, :url => session_path(resource_name, redir: CGI.escape("http://someurl")), html: {role: 'form'}) do |f|   %>