0

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

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

<% 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

4

2 回答 2

1

问题是同时使用了 authlogic_oauth 和 authlogic_openid 插件。这意味着用户的保存方法将由 openid 代码处理,而不是 oauth 代码。

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

于 2010-02-22T13:34:24.167 回答
0

您确定设置了@user 吗?在我看来,问题在于@user 为零。

于 2010-01-26T21:57:33.967 回答