我正在Rails应用程序上实现Omniauth Facebook登录。 我也在尝试实现友好的转发。 我的意思是,一旦您通过Facebook登录并通过devise注册,该应用程序应返回到先前的URL。
为此,我使用了会话变量。但是一旦应用程序重定向到Facebook,所有会话变量都消失了。
您能告诉我如何调用以前的URL吗?预先感谢。
[附录] 这是我的代码。
class ApplicationController < ActionController::Base
def after_sign_up_path_for(resource)
session[:url_before_signup] || "/#{I18n.locale}"
end
def store_location
session[:url_before_signup] = stored_location_for(:user)
end
class Users::OmniauthCallbacksController < Devise::RegistrationsController
def facebook
set_locale
@user = User.find_for_facebook_oauth(request.env["omniauth.auth"], current_user)
if @user.persisted?
# if you check session[:url_before_signup], it always turn to nil
sign_in_and_redirect @user, :event => :authentication
set_flash_message(:notice, :facebook_login_success) if is_navigational_format?
set_flash_message(:notice, :facebook_login_success_and_regist_data) if is_navigational_format? && @user.completed_at.nil?
else
session["devise.facebook_data"] = request.env["omniauth.auth"]
redirect_to new_user_registration_url
end
end
答案 0 :(得分:0)
您是否在控制器中尝试过request.referrer
?
答案 1 :(得分:0)
我的应用程序遇到了同样的问题,所以我应用了一个猴子补丁。 您可以做的是,可以在登录之前将以前的URL存储在会话中。登录后,您可以检查此会话变量是否存在,如果存在,则可以重定向到该网址。
示例:
class ApplicationController < ActionController::Base
after_filter :store_location
def store_location
# store last url as long as it isn't a /users path
if (request.fullpath != "/sign-in") || (!request.fullpath =~ /\/users/)
session[:previous_url] = request.fullpath
end
end
end
class SessionsController < Devise::SessionsController
def after_sign_in_path_for(resource_or_scope)
if session[:previous_url].present?
return_to_url = session[:previous_url]
end
end
end
我希望这对您有帮助