こんにちは、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
どこで間違えたのかわからない