提醒我的OmniAuth RailsCast(第235集)问题(第274集)

时间:2012-03-29 23:46:09

标签: ruby-on-rails ruby railscasts

我按照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。

我在OmniAuth和authentications_controller中遇到undefined method "authentications" for nil:NilClass错误。特别是我的控制台上写着:

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

以下是Authentications Controller代码:

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

这是我的Applications Controller中的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合作,这样用户就可以在维护我的current_user代码的同时避免我收到的错误,使用他们的Twitter帐户登录

非常感谢帮助。

1 个答案:

答案 0 :(得分:0)

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

如果没有确定用户已登录,则无法使用current_user。否则它将返回nil,这就是为什么它会说undefined method authentications for nil:NilClass

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