我正在尝试使用覆盖Devise的#after_sign_in_path_for来重定向到用户的最后一个URL页面或根路径:
# Redirects on successful sign in
def after_sign_in_path_for(resource)
puts session[:previous_url]
if session[:previous_url] != email_confirmation_url
session[:previous_url] || root_path
else
root_path
end
end
如果previous_url与email_confirmation_url相同,我不希望它重定向到上一页。但是,我的问题是,即使在会话结束时添加了参数[:previous_url],我仍希望该规则保持不变。我遇到的问题是
email_confirmation_url == /users/confirmation
session[:previous_url] == /users/confirmation?confirmation_token=HGESMzRz2sz1UbsvudSS
或其他一些令牌值。我想从URL中删除确认令牌或任何其他参数,然后进行比较。我怎么能这样做?
答案 0 :(得分:3)
假设所有网址参数都在网址?
之后,您可以这样做:
if session[:previous_url].split('?').first != email_confirmation_url
session[:previous_url] || root_path
else
root_path
end
您也可以使用start_with?检查session[:previous_url]
是否以email_confirmation_url
开头:
if !session[:previous_url].start_with? email_confirmation_url
session[:previous_url] || root_path
else
root_path
end
答案 1 :(得分:-1)
尝试使用
request.path
或
request.base_url + request.path