我按照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帐户登录
非常感谢帮助。
答案 0 :(得分:0)
您没有考虑用户未登录的情况。
您在create
行动中所执行的操作是将您网站上的用户帐户与其在Twitter上的帐户相关联。
如果没有确定用户已登录,则无法使用current_user
。否则它将返回nil
,这就是为什么它会说undefined method authentications for nil:NilClass
。
查看下一个更详细的railscast:http://railscasts.com/episodes/236-omniauth-part-2