通过内置的Omniauth支持帮助使用Devise

时间:2011-03-02 19:23:48

标签: ruby-on-rails authentication oauth devise omniauth

我试图关注https://github.com/plataformatec/devise/wiki/OmniAuth:-Overview,但不知何故,当我查看生成的路由时,我只看到回调路径,而不是授权路径(事实上,我在user_omniauth_authorize_path链接的视图中得到了错误)。

我认为它可能是OmniAuth和Devise(since after 0.2.0.beta Omniath allows configurable setting, and the routes must be defined)的版本问题。但是,在尝试使用较旧的OmniAuth版本时,我收到错误“You are using an old OmniAuth version, please ensure 0.2.0.beta or later installed.”。

我尝试使用Devise的主人,1.2.rc和omniauth分支以及整个omniauth gem(在0.2.0.beta之后)和'oa-oauth',但没有成功。 我也尝试定义路线:

match '/users/auth/:action/', :to => 'users/omniauth_callbacks#action', :as => 'user_omniauth_authorize'

这有助于路线,但是当按下链接时我确实得到了设计无法找到映射的错误。有趣的是,将devise_for中的控制器更改为无效(比如在users / omniauth_callbacks之前添加'/')第一次导致错误(“控制器名称不应以斜杠开头”),但实际发送的重新加载很少我到Facebook和后面(但自然没有定义回调路线)。

我是Ruby的新手,并不太确定我从哪里开始。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:6)

此方法为defined by devise,而非路由。因此,当您运行rake routes时,它不会显示。该方法使用您在config / initializers / devies.rb中配置的一个oauth提供程序。例如,如果在devise.rb中定义以下内容:

config.omniauth :facebook, FACEBOOK_APP_ID, FACEBOOK_APP_SECRET

然后你应该建立这样的授权链接:

<%= link_to "Facebook Sign in", user_omniauth_authorize_path(:facebook) %>

答案 1 :(得分:0)

我的问题是由于omniauth和devise的不同版本。最终工作的是在我的gemfile中使用这个配置:

gem 'devise', :git => 'git://github.com/plataformatec/devise.git'
gem 'omniauth', '>=0.2.0.beta'
gem 'oa-oauth', :require => 'omniauth/oauth'

您可以看到有关我的实施的更多详细信息here