0

我按照 Ryan Bates 的/RailsCasts 教程进行 cookie 登录并提醒我正在构建的应用程序中的功能。

[参考:http://railscasts.com/episodes/274-remember-me-reset-password?view=comments] 我想为同一个应用程序介绍他的 OmniAuth 功能。

[参考:http://railscasts.com/episodes/235-omniauth-part-1] 我没有使用设计。我正确加载 Twitter 应用程序页面,重定向回我的应用程序时发生错误。我在 Twitter 中正确设置了回调 URL。

undefined method "authentications" for nil:NilClassOmniAuth 和我的 authentications_controller 出现错误。具体来说,我的控制台显示:

NoMethodError (undefined method authentications for nil:NilClass):app/controllers/authentications_controller.rb:9:in create'.

这是身份验证控制器代码:

class AuthenticationsController < ApplicationController

  def index
    authentications = Authentication.all
  end

  def create
    auth = request.env["omniauth.auth"]
    current_user.authentications.create(:provider => auth['provider'], :uid => auth['uid'])
    flash[:notice] = "Authentication was successful."
    redirect_to authentications_url
  end

这是我的应用程序控制器中的 current_user 辅助方法。

private
  def current_user
    @current_user ||= User.find_by_auth_token!(cookies[:auth_token]) if cookies[:auth_token]
  end
  helper_method :current_user

用户有许多身份验证。身份验证属于用户。

我想让 OmniAuth 与 Twitter 一起工作,这样用户就可以使用他们的 Twitter 帐户登录,避免我在维护我的 current_user 代码时收到的错误

帮助表示赞赏。

4

1 回答 1

0

您没有考虑用户未登录的情况。您在create操作中所做的是将您网站上的用户帐户与他在 Twitter 上的帐户相关联。

你不能在current_user不确保用户登录的情况下使用。否则它会返回nil,这就是它说的原因undefined method authentications for nil:NilClass

看看下一个更详细的 railscast:http ://railscasts.com/episodes/236-omniauth-part-2

于 2012-03-30T00:44:34.877 回答