当我将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
)
(我知道此问题已在此处提出,但我没有看到任何真正的答案。)
答案 0 :(得分: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,通过设置/调整配置来查找是否存在直接在Omniauth中执行此操作的方法
希望这个帮助
答案 1 :(得分:0)
两件事:首先,由于您使用的是localhost,因此您必须设置端口号(假设为3000),因此端点应为 localhost:3000 。其次,您还必须设置重定向,也应该是 localhost:3000 。