OmniAuth:重定向到需要身份验证的页面,而不是用户来自的页面

时间:2011-09-29 10:30:02

标签: ruby-on-rails omniauth

我的应用程序中有一些页面要求使用链接进行身份验证。如果s / he尚未经过身份验证,我会在使用过滤器之前将用户重定向到/auth/linked_in。我希望在认证之后,用户应该被重定向到需要认证的页面而不是用户来自的页面。

过滤器看起来像:

def require_linked_in!
  unless current_user and current_user.linked_in_authenticated?
    redirect_to "/auth/#{Authentication::LINKED_IN}"
  end
end

在我的omniauth回调中,我做了一些事情,例如登录或将提供者数据与用户帐户相关联,如果一切正常,redirect_to request.env['omniauth.origin'] || root_url,但这会将用户重定向到页面,从中他点击链接到页面需要linked_in身份验证而不是目标页面。

如何将用户重定向到触发身份验证的页面而不是用户来自哪个页面?

PS:用户只能使用该应用程序的注册表单注册,但稍后可以连接到该链接和Facebook个人资料,并使用它们而不是普通的电子邮件/密码登录表单。如果它有任何区别。

1 个答案:

答案 0 :(得分:2)

我猜你需要在你的会话中存储url并在omniauth回调之后重定向。

def require_linked_in!
  session[:return_to] = request.url
  unless current_user and current_user.linked_in_authenticated?
    redirect_to "/auth/#{Authentication::LINKED_IN}"
  end
end

在您的回调操作中,您可以使用:

redirect_to session[:return_to] || root_url

希望它有所帮助!

相关问题