Omniauth - Origin是零

时间:2011-04-26 15:05:29

标签: ruby-on-rails omniauth

我正在使用推特的宝石。在回调时,检查用户是否存在并创建他或将他发送回主页。
我可能做错了,但在我的回调代码中, request.env ['omniauth.origin']为零

我的代码非常简单:
whatever.html.erb

<%= link_to image_tag("twitter-connect.png"), "/auth/twitter" %>

的routes.rb

match "/auth/:provider/callback" => "sessions#create"

sessions_controller.rb

def create
    auth = request.env["omniauth.auth"]
    user = User.find_by_provider_and_uid(auth["provider"], auth["uid"]) || User.create_with_omniauth(auth)
    if !user.email
        redirect_to confirm_path, :notice => "Add your email!"
    else
        redirect_to request.env['omniauth.origin'] || root_url, :notice => "Signed in!"
    end
end

如果我在回调后立即提出 request.env ['omniauth.origin'] ,我会得到 nil 对象。

感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

试用版本0.2.0 - 我已经能够使用这个版本而不会出现Rails 3.0.9和Ruby 1.9.2-p180的任何问题。

  1. 上面的行不应该是

    user = auth.find_by_provider_and_uid(auth [“provider”],auth [“uid”])|| User.create_with_omniauth(AUTH)

  2. 至于omniauth.originnil,请参阅this discussion

答案 1 :(得分:0)

您需要在视图中的链接中手动设置原点。在Rails 4中,request.original_url是执行此操作的最佳方式。

在link_to Twitter按钮中,您可以手动设置原点:

"/auth/twitter?origin=#{request.original_url}"

然后在你的SessionsController重定向到request.env [&#39; omniauth.origin&#39;]时,它应该正常运行。