使用Ajax进行Omniauth授权调用
在使用它作为链接时,我的Rails 3应用程序中有omniauth工作正常:
link_to("Connect Twitter", "/auth/twitter", :id => "connect-to-twitter")
现在我想通过ajax调用'/ auth / twitter'。 但是,请求阶段后没有任何内容返回。 这是最后一个日志条目:
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
)
(我知道这个问题在这之前已经被问过了,但我还没有看到任何真正的答案。)
我知道这个问题有点老,但我仍然会回答。 面对这个问题,并期望实现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,以找到他们是否存在一种方法,直接在Omniauth中设置/调整配置
希望这个帮助
有两件事:首先,由于您使用的是本地主机,您必须设置端口号(假设为3000),因此端点应为localhost:3000 。 其次,你也必须设置一个重定向,它也应该是localhost:3000 。
链接地址: http://www.djcxy.com/p/65493.html