Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/facebook/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 使用Rails、Desive和Omniauth访问哪个控制器和操作_Ruby On Rails_Facebook_Devise_Omniauth - Fatal编程技术网

Ruby on rails 使用Rails、Desive和Omniauth访问哪个控制器和操作

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

我正在Rails 4应用程序中使用Desive和Omniauth。在我看来,我有一个“使用Facebook登录”按钮,它将用户指向
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