Ruby on rails 使用Rails、Desive和Omniauth访问哪个控制器和操作
我正在Rails 4应用程序中使用Desive和Omniauth。在我看来,我有一个“使用Facebook登录”按钮,它将用户指向Ruby on rails 使用Rails、Desive和Omniauth访问哪个控制器和操作,ruby-on-rails,facebook,devise,omniauth,Ruby On Rails,Facebook,Devise,Omniauth,我正在Rails 4应用程序中使用Desive和Omniauth。在我看来,我有一个“使用Facebook登录”按钮,它将用户指向user\u omniauth\u authorize\u path(:Facebook)。这将按预期工作,并将用户发送到/users/auth/facebook。然后,该URL似乎正确地将用户重定向到Facebook登录页面 如何确定用于此重定向的控制器/操作?我想在重定向到Facebook之前设置一个返回\u url。我可以在我的常规会话和注册控制器中通过对Des
user\u omniauth\u authorize\u path(:Facebook)
。这将按预期工作,并将用户发送到/users/auth/facebook
。然后,该URL似乎正确地将用户重定向到Facebook登录页面
如何确定用于此重定向的控制器/操作?我想在重定向到Facebook之前设置一个返回\u url
。我可以在我的常规会话
和注册
控制器中通过对Desive版本进行子类化并添加我的代码来实现这一点,如下所示:
class Users::SessionsController < Devise::SessionsController
def new
return_url = params[:return_url]
store_location_for(:user, return_url) unless return_url.nil?
super
end
end
我正试图用omniauth功能完成同样的事情?当用户访问/users/auth/facebook
时,是否有办法找出正在访问哪个控制器?如果是这样的话,我可以像上面那样对它进行子类化并添加功能吗
更新
我通过运行“rake路由”找到控制器/操作。它是这样说的:
user_omniauth_authorize GET|POST /users/auth/:provider(.:format) users/omniauth_callbacks#passthru {:provider=>/facebook/}
因此,我能够找到正在使用的passthru
方法,但这让我更加困惑。它在designe::OmniAuthCallbackController
中显示:
def passthru
render status: 404, text: "Not found. Authentication passthru."
end
我对这种方法如何导致用户被重定向到Facebook感到困惑。看起来您可以将参数传递给
用户\u omniauth\u authorize\u path
,然后使用request.env[“omniauth.params”]
在回调URL中检索它们。因此,我将链接改为:user\u omniauth\u authorize\u path(:facebook,{return\u url:'/test\u redirect\u path'}
然后在OmniAuthCallbackController中,我添加了:
(:user,request.env[“omniauth.params”][“return\u url”])的存储位置
在调用登录和重定向@user
之前
这似乎已经做到了。看起来您可以将参数传递给
用户\u omniauth\u authorize\u path
,然后使用request.env[“omniauth.params”]
在回调URL中检索它们。因此,我将链接更改为:用户\u omniauth\u authorize\u path(:facebook,{return\u URL:'/test\u redirect\u path')
然后在OmniAuthCallbackController中,我添加了:
(:user,request.env[“omniauth.params”][“return\u url”])的存储位置
在调用登录和重定向@user
之前
这似乎成功了。看看你需要添加一个回调\u url:)我不认为这是我想要的。回调url是当用户从Facebook返回时处理请求的url。这是为应用程序全局设置的。我希望在用户发送到Facebook之前设置重定向url,然后确保回调url最终将用户重定向到设置的url。好的这很可悲,因为我遇到了同样的问题,而你实际上从来没有找到你问题的“为什么”(它没有通过你的控制器),只是找到了一条路。我还在搜索。看看你需要添加一个回调(url:)我不认为这是我要找的。回调url是当用户从Facebook返回时处理请求的url。这是为应用程序全局设置的。我希望在用户被发送到Facebook之前设置一个重定向url,然后确保回调url最终将用户重定向到设置的url。这很遗憾,因为我遇到了同样的问题,而你实际上从来没有找到你问题的“为什么”(不是通过你的控制器),只是找到了一个解决办法。我还在找。
def passthru
render status: 404, text: "Not found. Authentication passthru."
end