说我有模型用户和项目。用户和项目与HABTM相关。我的设置实际上比这更复杂,但我认为出于我的问题的目的,这将是。
现在,我想使用omniauth通过Twitter,Facebook验证特定项目,你有什么。我已经弄清楚如何定义我的omniauth path_prefix,但我不知道如何传递一个这样的变量:config.path_prefix = 'projects/:project_id/auth'
,更不用说像project /:project_id / auth / twitter一样自定义回调网址了/回调。
答案 0 :(得分:1)
这将打破生产。在开发中,您可以使用会话变量。但是在生产中你需要让回调url包含你的project_id,因为它可能是2个或更多个不同的auth_project_id注册,然后你无法知道之后调用哪个(回调是异步的)。
https://github.com/mkdynamic/omniauth-facebook#custom-callback-urlpath
类似于config.path_prefix =" projects /#{@ project.id} / auth"可能有用。我现在正在测试类似的情况。
答案 1 :(得分:0)
为了后人的缘故,我这样解决了:
我在项目控制器中添加了auth
方法,该方法设置会话变量session[:auth_project_id]
,然后重定向到auth/ + params[:provider]
。
在我的回调控制器authentications
中,我使用@project = Project.find(session[:auth_project_id])
创建了项目,创建了身份验证,然后session[:auth_project_id] = nil
取消设置会话变量。
答案 2 :(得分: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']