"con-6ren">
gpt4 book ai didi

ruby-on-rails - 使用 Ajax 进行 Omniauth 授权调用

转载 作者:行者123 更新时间:2023-12-04 12:34:37 26 4
gpt4 key购买 nike

当使用它作为链接时,我的 omniauth 在我的 Rails 3 应用程序中工作正常:

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 中执行此操作的方法

希望这有帮助

关于ruby-on-rails - 使用 Ajax 进行 Omniauth 授权调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13149952/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com