Authlogic openid: получение неопределенного метода openid_identifier? ошибка в функциональном тесте

Я использую Authlogic с аддоном Authlogic-openid (я установил gem ruby-openid и скрипт / плагин устанавливает 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 | ...

Я чувствую, что упускаю что-то довольно простое, но я слишком долго смотрел на это, потому что не могу найти, что это такое. Я проверил код на эпизодах 160 и 170 Railscasts и в проекте GitHub костей, но ничего не нашел.

Спасибо за помощь, usr


person Bob Groeneveld    schedule 26.01.2010    source источник


Ответы (2)


Проблема в том, что плагины authlogic_oauth и authlogic_openid использовались одновременно. Это означает, что метод сохранения для пользователя будет обрабатываться кодом openid, установленным для кода oauth.

Возможно, библиотека authlogic_rpx сможет успешно комбинировать эти два метода, мне еще нужно это проверить.

person Bob Groeneveld    schedule 22.02.2010

Вы уверены, что установлен @user? Мне кажется, проблема в том, что @user равен нулю.

person psyho    schedule 26.01.2010
comment
Да, я использую декларативную авторизацию, а строка filter_resource_access находится в верхней части файла users_controller.rb. Даже если я добавлю @user = User.new (params [: user]) перед сохранением, я получу ту же ошибку. Я думал, что это может быть тот факт, что я использую blogger в качестве провайдера openid, но если я использую openid.org, я все равно получаю ту же ошибку. - person Bob Groeneveld; 27.01.2010