Omniauth Facebook手动导轨

问题描述 投票:1回答:1

我正在Rails 3应用程序中将Omniauth facebook与两个设计模型一起使用。当前,使用omniauthable和devise助手无法实现。

类似的问题回答了如何执行此操作:

Omniauth "with" STI and devise

“ ..将您的omniauth配置从devise.rb移到omniauth.rb,并创建自己的omniauth路由。'

但是我在定义这些路线和帮助程序时遇到了麻烦,即对于Facebook,我使用了这样的设计帮助程序:

user_omniauth_authorize_path(:facebook) 

..重定向到facebook,然后在我的devise_for范围中放置了我设置的回调URL。

如果手动设置,对于omniauth-facebook策略,我的路线/助手会是什么样?

我已经有了omniauth-facebook,并且之前为'User'模型设计得很好,所以我有各种选择

@user = User.find_for_facebook_oauth(request.env["omniauth.auth"], current_user, params[:state])

.. parts可以使用了,但是现在有了两个模型。我只是无法替换我认为的设计助手。

ruby-on-rails-3 devise omniauth
1个回答
2
投票

您的链接应显示为:

<%= link_to "Sign in with Facebook", "/auth/facebook" %>

您还必须创建一些回调路由,有两种方法可以执行此操作。您可以:

  1. 定义捕获所有回调并重定向到单个控制器操作的路由:

    get "/auth/:provider/callback" => "authentications#create"
    

    然后您可以使用params[:provider]获取提供者的名称。然后使用if可以根据提供者来做不同的事情。

  2. 或为每个提供程序定义一条路由,您可以在其中指向控制器中的不同操作:

    get "/auth/twitter/callback" => "authentications#twitter"
    get "/auth/facebook/callback" => "authentications#facebook"
    

    这些路线也可以在一个路线中浓缩:

    get "/auth/:action/callback",
      :to => "authentications",
      :constraints => { :action => /twitter|facebook/ }
    

    然后您需要定义这些操作。例如,在twitter操作中,您可以获取用户的推文;在facebook操作中,您可以获取用户的帖子。

[另外,不要忘记创建failure操作来处理用户未授权使用特定提供程序登录的情况。

现在,您会遇到问题。您如何找到链接应指向的位置?对于Twitter和Facebook,这似乎很明显(分别为/auth/twitter/auth/facebook)。

但是如果您使用omniauth-google-oauth2宝石通过Google+登录怎么办?您唯一的希望是每个omniauth gem(listed here)都有一些好的文档。

无论如何,如果您不知道应该使用的网址,或者只是不喜欢某个gem所使用的网址,则可以随时对其进行更改!

例如,URL /auth/google_oauth2当然不是很漂亮,至少与Facebook和Twitter的URL相比。要更改网址,请使用name选项。

# omniauth.rb, when using pure omniauth
provider :google_oauth2, ENV['GOOGLE_KEY'], ENV['GOOGLE_SECRET'],
  {
    name: 'google'
  }

# devise.rb, when using omniauth+devise
config.omniauth :google_oauth2, ENV['GOOGLE_KEY'], ENV['GOOGLE_SECRET'],
  {
    name: 'google',
  }

现在您可以使用URL /auth/google,更好了。

[注:我对AuthenticationsController进行了多次引用,但也许您所拥有的是CallbacksControllerOmniauthCallbacksController,您实际上称它为什么都没有关系。

© www.soinside.com 2019 - 2024. All rights reserved.