2012-10-31 98 views
7

我omniauth使用它時,作爲一個鏈接在我的Rails做工精細3應用:Omniauth授權的呼叫使用Ajax

link_to("Connect Twitter", "/auth/twitter", :id => "connect-to-twitter") 

現在我想通過Ajax調用「/ auth /中嘰嘰喳喳」。但是,請求階段後沒有任何內容返回。這裏是最後的日誌條目:

Started GET "/auth/twitter" for 127.0.0.1 at 2012-10-30 17:53:02 -0700 
(twitter) Request phase initiated. 

這裏是我的Ajax代碼(在CoffeeScript中):

$("#connect-to-twitter").live("click", -> 
    alert('get twitter') 
    $.get('/auth/twitter', (data) -> 
    alert(data) 
) 
    return false 
) 

(我知道這個問題已經在此之前,有人問,但我還沒有看到任何真正的答案吧)

+0

嘿直接Omniauth存在的方式做到這一點,你有沒有找到任何解決辦法了嗎?我只是有同樣的目的,儘管我仍然很努力 – JustBasti

+0

沒有,從來沒有弄清楚這一點。 –

+0

嗯,我只是想繞過使用fb/twitter JS api:/雖然看起來不可能沒有。 – JustBasti

回答

4

我知道問題有點老了,但我仍然會回答。面臨的問題,並希望獲得同樣的什麼OP打算我這樣做

我寫了一箇中間件和在這裏的Omniauth上述中間件如何看待

class OmniAuthMiddleware 
    def initialize(app) 
    @app = app 
    end 

    def call(env) 
    status, headers, body = @app.call(env) 
    request = Rack::Request.new(env) 
    if request.xhr? and status == 302 and request.path_info =~ /\/auth\/\w+\z/ and body.class == Rack::BodyProxy 
     location = headers["Location"] 
     body = ActionDispatch::Response.new 
     headers = {'Content-Type'=>'text/javascript; charset=utf-8'} 
     body.body = ["window.location.href='#{location}'"] 
     body.headers = headers 
     status = 200 
    end 
    [status,headers,body] 
    end 
end 

這裏如何插入後,我通過中間件在中間件​​堆棧

Rails.application.config.middleware.insert_before OmniAuth::Builder,OmniAuthMiddleware 

這裏插入我的中間件堆棧如何看待

... 
... 
... 
use Warden::Manager 
use Rack::Mongoid::Middleware::IdentityMap 
use ExceptionNotifier 
use OmniAuthMiddleware 
use OmniAuth::Builder 
run PoasterApi::Application.routes 

有了這個,我能實現我想要的東西

注意:我還沒有發現有關在Omniauth文檔,因爲我正在運行與時間因此我實現了這個修復AJAX的東西任何信息(因爲谷歌搜索從來沒有給我一個有利的答案)。 Omniauth也可能支持ajax響應,但正如我所說的,我無法在文檔中找到它。答案是那些希望實現完全相同的功能,但不確定如何在Omniauth中實現它的用戶。

我仍然在尋找在Omniauth發現,如果他們通過設置/調整配置

希望這有助於

0

兩件事情:第一,由於您使用本地主機,你必須設置(假設3000)的端口號,所以終點應該是本地主機:3000。其次,你還必須設置一個重定向,這也應該是localhost:3000