我想基于他们用来签名的参数来重定向用户但是我没有找到方法。
用户从/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
列中的参数然后重定向。如果用户来自原始网址,我会将列更新为""
。浪费时间,对吗?
答案 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| %>