0

嗨,我正在尝试运行 Railscast 的 #241 - 将 Omniauth 用于 twitter - 最终使用 facebook。我正在尝试制作的应用程序需要 Facebook 的登录,但由于有一个关于如何使用 twitter 登录的视频,不妨首先遵循它,但我遇到了问题。

登录 Twitter 后,我不断收到此错误。“SessionController#create 中的 NoMethodError” - nil:NilClass 的未定义方法“[]”。这是相关的代码。

class SessionsController < ApplicationController
    def create
        auth = request.env["omniauth.auth"]
        user = User.find_by_provider_and_uid(auth["provider"], auth["uid"]) || User.create_with_omniauth(auth)
        session[:user_id] = user.id
        redirect_to root_url, :notice => "Signed in!"
    end
end

我还通过 dev.twitter.com 设置了网站和回调链接,如下所示:网站:“http://127.0.0.1:3000”回调:“http://127.0.0.1:3000/auth/twitter/callback”

配置/初始化程序中的 Omniauth.rb:

Rails.application.config.middleware.use OmniAuth::Builder do
  provider :twitter, 'CONSUMER_KEY', 'CONSUMER_SECRET'
end

(我已经提供了消费者密钥和秘密)

应用程序.html.erb

<div id="user_nav">
  <%= link_to "Sign in with Twitter", "/auth/twitter" %>
</div>

在 routes.rb 中添加了这一行

match "/auth/:provider/callback" => "sessions#create"

用户.rb

class User < ActiveRecord::Base
  attr_accessible :name, :provider, :uid

  def self.create_with_omniauth(auth)
    create! do |user|
      user.provider = auth["provider"]
      user.uid = auth["uid"]
      user.name = auth["user_info"]["name"]

  end
end

我不知道我哪里出错了

4

1 回答 1

1

好的,我发现了问题。花了我一段时间。

Twitter将他们的“user_info”元素更改为“info”所以而不是

user.name = auth["user_info"]["name"] 

这是

user.name = auth["info"]["name"]

接下来要更改的是会话控制器中的

session[:user_id] = user.id

session[:user_id] = user.uid
于 2012-05-27T15:35:36.477 回答