-3
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("/sessions/sign")
  end

  def sign  

  end    
end

これはユーザーモデルにあります

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
end

エラー:

undefined method '[]' for nil:NilClass

Facebookでサインインすると、上記のエラーが表示されます

4

1 に答える 1

2

以下が存在し、存在しないことを確認する必要がありますnil

auth = request.env["omniauth.auth"]

あなたができる

auth = request.env["omniauth.auth"]
if auth
  # do stuff
else
  # error handler
end

またはあなたのモデルで私はチェックします:

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

最後に、次のようにtryメソッドを使用してnil値を処理できます。

auth.try(:[], 'provider')

の場合authnilを返しnil、それ以外の場合はキーの値を返しますprovider

于 2013-07-11T08:18:33.523 に答える