3

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

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

4

3 回答 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" 这样的东西可能会起作用。我现在正在测试类似的情况。

于 2013-09-16T11:04:40.867 回答
0

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

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

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

于 2011-04-11T13:00:00.643 回答
0

我用设计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']

于 2016-02-10T09:05:44.787 回答