【问题标题】:OmniAuth dynamic callback url to authenticate particular objects instead of current_userOmniAuth 动态回调 url 来验证特定对象而不是 current_user
【发布时间】:2011-04-03 22:51:20
【问题描述】:

假设我有模型用户和项目。用户和项目与 HABTM 相关。我的设置实际上比这要复杂一些,但我认为就我的问题而言,这是可行的。

现在,我想使用omniauth 来通过Twitter、Facebook 对特定项目进行身份验证,你有什么。我已经想出了如何定义我的omniauth path_prefix,但我不知道如何传递一个像这样的变量:config.path_prefix = 'projects/:project_id/auth',更不用说像project/:project_id/auth/twitter/callback这样的自定义回调url了.

【问题讨论】:

    标签: omniauth ruby-on-rails-3


    【解决方案1】:

    这将中断生产。在开发中,您可以摆脱会话变量。但是在生产中,您需要让回调 url 包含您的 project_id,因为它可能是 2 个或更多注册不同的 auth_project_id,然后您无法知道之后调用哪个(回调是异步的)。

    https://github.com/mkdynamic/omniauth-facebook#custom-callback-urlpath

    类似 config.path_prefix = "projects/#{@project.id}/auth" 的东西可能会起作用。我现在正在测试类似的情况。

    【讨论】:

      【解决方案2】:

      为了后代,我这样解决了:

      我在我的项目控制器中添加了一个auth 方法,它设置了一个会话变量session[:auth_project_id],然后重定向到auth/ + params[:provider]

      在我的回调控制器authentications 中,我使用@project = Project.find(session[:auth_project_id]) 获取了我的项目,创建了身份验证,然后session[:auth_project_id] = nil 取消设置会话变量。

      【讨论】:

        【解决方案3】:

        我用设计omniauthable做了类似的事情,你可以通过链接传递任何参数。喜欢

        <%= link_to "Add twitter Account",  user_omniauth_authorize_path(:twitter, params:  { project_id: @project.id     }) %>
        

        然后在你的回调控制器中

        before_action :set_project, only: [:twitter]
        
        def set_project
          @project = Project.find(request.env['omniauth.params']['project_id'])
        end
        

        注意:不要使用 request.env['omniauth.auth']

        【讨论】:

          猜你喜欢
          • 2012-05-21
          • 1970-01-01
          • 2011-01-13
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-12-29
          • 1970-01-01
          • 2023-04-04
          相关资源
          最近更新 更多