NoMethodError in SessionsController#create in ruby on rails -


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 

this in user model

class user < activerecord::base   attr_accessible :name, :provider, :uid    def self.create_with_omniauth(auth)     create! |user|       user.provider=auth["provider"]       user.uid=auth["uid"]       user.name=auth["user_info"]["name"]     end   end end 

error:

undefined method '[]' nil:nilclass 

when sign in through facebook above error

you need make sure following exists , not nil

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

you do

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

or in model check:

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

finally can use try method deal nil values, this:

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

if auth nil, return nil, otherwise return value key provider


Comments

Popular posts from this blog

javascript - Count length of each class -

What design pattern is this code in Javascript? -

hadoop - Restrict secondarynamenode to be installed and run on any other node in the cluster -