4

我见过几个人问过类似的问题,但我真的需要关于如何调试这个问题的建议。我正在尝试使用此处的文章使用 Devise 设置 facebook 连接:https ://github.com/plataformatec/devise/wiki/OmniAuth:-Overview

每次我点击使用 facebook 链接登录时,我都会得到一个空白页面,上面写着:未找到。身份验证通道。显然,前一页上没有 JavaScript/ajax 设置来调出 facebook 登录屏幕。

我知道这可以在我的系统上运行,因为我使用上面链接中完全相同的代码制作了一个空白项目并且它可以工作。当然,我的项目要大得多,有很多代码,所以我试图弄清楚我的项目中是什么导致它没有触发。

任何有关如何调试的帮助表示赞赏。

谢谢!

4

2 回答 2

1

这是来自设计源的#passthru 代码。

def passthru
    render :status => 404, :text => "Not found. Authentication passthru."
end

这意味着设计无法识别您的 Facebook 回调。确保正确设置回调控制器或发布用户控制器代码。

于 2013-12-18T14:54:05.423 回答
0

我遇到了同样的错误。我错过了 Facebook 回调控制器(app/controllers/users/omniauth_callbacks_controller.rb):

class Users::OmniauthCallbacksController < Devise::OmniauthCallbacksController

  # ...

  def facebook
    respond_to do |format|
      format.html {
        @user = User.find_for_facebook(request.env["omniauth.auth"])

        if @user.persisted?
          sign_in_and_redirect @user
          set_flash_message(:notice, :success, :kind => "Facebook") if is_navigational_format?
        else
          session["devise.facebook_data"] = request.env["omniauth.auth"]
          redirect_to new_user_registration_url
        end
      }
    end
  end
end

此代码引用了我的用户模型 (app/models/user.rb) 中的方法“find_for_facebook”:

class User < ActiveRecord::Base

  # ...

  def self.find_for_facebook(auth_hash)
    user = User.where(:email => auth_hash.info["email"]).first

    unless user
      user = User.create(
        username: auth_hash.info["nickname"],
        email: auth_hash.info["email"],
        password: Devise.friendly_token[0,20])
    end

    user.provider = auth_hash["provider"]
    user.uid = auth_hash["uid"]
    user
  end
end

确保重新启动您的开发服务器,以便获取所有更改。

于 2015-02-12T05:02:19.100 回答