R – Authlogic openid: getting undefined method openid_identifier? error in functional test

authlogicauthlogic-oidopenidruby-on-rails

I use Authlogic with the Authlogic-openid addon (I gem installed ruby-
openid and script/plugin install git://github.com/rails/open_id_authentication.git)
and get two errors.

First when running functional test, I get an undefined method
openid_identifier? message on a line in my new.html.erb file when
running the UsersControllerTest. The line is:

<% if @user.openid_identifier? %> 

When running script/console I can access this method without any
problem.

Second when testing the openid functionality and registering a new
user to my application using openid and using my blogspot account for
that I get the following in my log file:

Generated checkid_setup request to http://www.blogger.com/openid-server.g 
with assocication ... 
Redirected to http://www.blogger.com/openid-server.g?openid.assoc_handle=... 
NoMethodError (You have a nil object when you didn't expect it! 
The error occurred while evaluating nil.call): 
  app/controllers/users_controller.rb:44:in `create' 
  /usr/lib/ruby/1.8/webrick/httpserver.rb:104:in `service' 
  /usr/lib/ruby/1.8/webrick/httpserver.rb:65:in `run' 
  /usr/lib/ruby/1.8/webrick/server.rb:173:in `start_thread' 
  /usr/lib/ruby/1.8/webrick/server.rb:162:in `start' 
  /usr/lib/ruby/1.8/webrick/server.rb:162:in `start_thread' 
  /usr/lib/ruby/1.8/webrick/server.rb:95:in `start' 
  /usr/lib/ruby/1.8/webrick/server.rb:92:in `each' 
  /usr/lib/ruby/1.8/webrick/server.rb:92:in `start' 
  /usr/lib/ruby/1.8/webrick/server.rb:23:in `start' 
  /usr/lib/ruby/1.8/webrick/server.rb:82:in `start' 

The code in the users_controller is straight forward:

  def create 
    respond_to do |format| 
        @user.save do |result| 
                if result 
                flash[:notice] = t('Thanks for signing up!') 
                format.html { redirect_to :action => 'index' } 
                format.xml  { render :xml => @user, :status => :created, :location => @user } 
              else 
                format.html { render :action => "new" } 
                format.xml  { render :xml => @user.errors, :status => :unprocessable_entity } 
              end 
      end 
    end 
  end 

The line giving the error being @user.save do |result|…

I feel I'm missing something pretty basic but I have been staring at
this for too long because I can't find what it is. I checked with the
code on Railscasts episodes 160 and 170 and the bones GitHub project
but found nothing.

Thanks for your help, usr

Best Answer

The problem is the fact that the authlogic_oauth and authlogic_openid plugins were used at the same time. This means that the save method on user will be handled by the openid code instaed of the oauth code.

Maybe the authlogic_rpx library can combine the two methods succesfully, I need to test this still.

Related Topic