【问题标题】:facebook authentication with omniauth使用omniauth 进行facebook 身份验证
【发布时间】:2011-03-09 14:29:14
【问题描述】:

根据 Ryan Bates screencast,我正在向我的应用程序添加带有omniauth 的 Facebook 身份验证

身份验证控制器中的创建函数存在问题。 create 函数应该处理 facebook 回调(这似乎很好)。

日志文件中的错误是:

NoMethodError(未定义的方法 nil:NilClass 的“身份验证”)

错误是指认证控制器中create函数中的这一行:

current_user.authentications.find_or_create_by_provider_and_uid(auth['provider'], auth['uid'])

你认为是什么问题?

谢谢,

奥德

【问题讨论】:

  • 请发布您的用户和身份验证模型。
  • 抱歉,我忽略了错误消息的内容。请看下面我的回答。如果您需要帮助来确定 current_user 为 nil 的原因,您必须发布用于获取 current_user 的代码。

标签: ruby-on-rails facebook devise omniauth


【解决方案1】:

问题是当您尝试进行身份验证时您没有登录,因此 current_user 为 nil。登录然后进行身份验证,您将被重定向到身份验证索引页面。这就是他在railscast中的做法。在下一集中,他解决了未登录的用户。

【讨论】:

    【解决方案2】:

    您的 current_user 为 nil,因此当您尝试访问 nil 对象的身份验证时,您会收到您所看到的错误消息。

    您需要修复您的 current_user 方法。

    【讨论】:

    • 我不确定 current_user 方法在哪里。我认为它在“设计”宝石中。反正我没有写这个方法。
    • 你没看错,是devise提供的辅助方法。你运行 rake db:migrate 了吗?查看“入门”部分的设计:github.com/plataformatec/devise
    • 你知道我在哪里可以检查助手是否在我的应用程序中吗?
    • @Oded,Rails 助手定义在 app/helpers 目录中。
    【解决方案3】:

    我也遇到了同样的问题,但是已经解决了。 抛出此错误的原因是 AuthenticationController 的 create 操作期望有一个当前登录的用户,并尝试为该用户查找或创建新的身份验证。由于我们尝试在没有先使用用户名和密码登录的情况下进行身份验证,因此 current_user 变量将为 nil。

    点击链接解决问题http://railscasts.com/episodes/236-omniauth-part-2?view=asciicast

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-07-20
      • 1970-01-01
      • 2014-04-29
      • 1970-01-01
      • 2017-08-27
      • 2017-11-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多