Authlogic openid:获取未定义的方法openid_identifier?功能测试中的错误

时间:2010-01-26 21:31:31

标签: ruby-on-rails openid authlogic authlogic-oid

我将Authlogic与Authlogic-openid插件一起使用(我的宝石安装了ruby- openid和script / plugin安装git://github.com/rails/open_id_authentication.git) 并得到两个错误。

首先运行功能测试时,我得到一个未定义的方法 openid_identifier?我的new.html.erb文件中的一行上的消息 运行UsersControllerTest。该行是:

<% if @user.openid_identifier? %> 

运行脚本/控制台时,我可以不使用任何方法访问此方法 问题。

第二,测试openid功能并注册新功能 用户使用openid并使用我的blogspot帐户进入我的应用程序 我在我的日志文件中得到以下内容:

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' 

users_controller中的代码是直截了当的:

  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 

给出错误的行是@ user.save do | result | ...

我觉得我错过了一些非常基本但我一直在盯着的东西 这太久了,因为我找不到它是什么。我查了一下 Railscasts剧集160和170以及骨头GitHub项目的代码 但一无所获。

感谢您的帮助,usr

2 个答案:

答案 0 :(得分:1)

问题在于同时使用了authlogic_oauth和authlogic_openid插件。这意味着用户的save方法将由oauth代码的openid代码处理。

也许authlogic_rpx库可以成功地组合这两种方法,我还需要对此进行测试。

答案 1 :(得分:0)

你确定@user已设置好吗?在我看来问题是@user是零。