0

こんにちは、Railscast の #241 - twitter に Omniauth を使用 - 最終的には facebook で実行しようとしています。最初にそれに従ってくださいが、私は問題にぶつかっています。

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 経由で Web サイトとコールバック リンクを設定しました。

config/initializers の Omniauth.rb:

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

(コンシューマ キーとシークレットは既に提供しています)

Application.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 に答える