【问题标题】:using omniauth how to change callback path dynamically使用omniauth如何动态更改回调路径
【发布时间】:2015-03-30 18:09:14
【问题描述】:

我想动态更改omniauth 回调网址。 但我不知道如何动态更改。

我希望在查看路径时改变,而不是加载配置。

喜欢这个

- if @is_android
  - callback_path = omniauth_authorize_path(resource_name, "facebook",   callback_path: "/resource/auth/facebook/callback/android")
- else
  - callback_path = omniauth_authorize_path(resource_name, "facebook")

= link_to "sign up with facebook", fb_auth_path

谢谢

【问题讨论】:

    标签: ruby-on-rails ruby devise omniauth omniauth-facebook


    【解决方案1】:

    看来,这是不可能的。 omniauth gem 用作 Rack 中间件,因此必须在启动时加载。

    omniauth_authorize_path 基本没用。它只是在那里,因此您可以以 Rails 方式很好地创建路径,而不必编写 link_to 'FB', '/auth/facebook'

    所以我最好的建议是在控制器中轻松区分这两个操作,就像我在我的应用中所做的那样:

    def facebook
      if user_signed_in?
        bind_facebook_account
      else
        login_or_preregister
      end
    end
    

    【讨论】:

    • 感谢您的评论,但我不明白的意思...我试图挂钩omniauth_authrize_path 并更改Facebook 的请求。像这样 ` class MyApp::OmniauthCallbacksController
    • 如果您运行rake routes,您应该会看到omniauth 路由。如果没有,请在设计 Wiki 中关注this example。无论如何,我记得,设计使用路径的“用户”前缀。应该是/users/auth/facebook
    【解决方案2】:

    我认为您可以使用route constraints 来决定将哪个路由用作回调。

    基本上,约束返回 true 或 false,将 request 作为参数,因此您可能会执行以下操作:

    match "/auth/:provider/callback" => "sessions#android_new", :constraints => IsAndroidConstraint
    match "/auth/:provider/callback" => "sessions#new"
    

    【讨论】:

      猜你喜欢
      • 2015-03-17
      • 2011-01-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-28
      • 2012-08-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多