2011-04-03 27 views
3

假設我有模型User和Project。用戶和項目與HABTM相關。我的設置實際上比這更復雜一點,但我認爲這是爲了我的問題。OmniAuth動態回調url驗證特定對象而不是current_user

現在,我想用omniauth通過Twitter,Facebook認證一個特定的項目,你有什麼。我已經想通了如何定義我的omniauth串流中刪除,但我不知道我如何能在一個變量傳遞像這樣:config.path_prefix = 'projects/:project_id/auth',更談不上做一個自定義的回調URL喜歡的項目/:PROJECT_ID /認證/嘰嘰喳喳/回調。

回答

0

爲後人的緣故,我解決了這種方式:

我添加了一個auth方法來我的項目控制器,它設置會話變量session[:auth_project_id]然後redirectes到auth/ + params[:provider]

在我的回調控制器authentications中,我得到了我的項目@project = Project.find(session[:auth_project_id]),創建了身份驗證,然後session[:auth_project_id] = nil取消設置會話變量。

+0

嗯,這個可以工作,但有必須是一個更好的方法..研究... – wulftone 2011-05-15 16:54:54

1

這將打破生產。在開發中,您可以使用會話變量。但在生產中需要有回調URL包含您的PROJECT_ID因爲它可能是2或與不同auth_project_id的多個註冊,那麼你有沒有辦法知道哪一個是後來被稱爲(回調異步)的方式。

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

像config.path_prefix = 「projects/#{@project.id}/auth」 可能會奏效。我現在正在測試類似的情況。

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']