2009-12-31 3 views
0

Warp Drive - отличный способ упаковать все приложение Rails в Gem для использования в других приложениях Rails. Я заставил Warp Drive работать на механизм ведения блога, который я создаю. Есть только одна проблема - аутентификация Authlogic OpenID терпит неудачу.Аутентификация Authlogic/OpenID с использованием Warp Drive

Я создал bare-bones OpenID example application. Я могу компилировать драгоценный камень без проблем:

$ warpify 
$ rake warp_drive:compile 

Затем я установил скомпилированный камень на моей системе. Создание пустого проекта Rails, я побежал:

$ install_warp_drive rails-openid 

Вы можете get this project here.

В моих пустых Rails проектов, мне нужно настроить драгоценные камни через environment.rb (я, вероятно, делать это неправильный путь):

config.gem "authlogic" 
config.gem "authlogic-oid", :lib => "authlogic_openid" 
config.gem "ruby-openid", :lib => "openid" 

Чтобы получить пустой Rails приложения работать, я побежал грабли БД: мигрировать , затем через консоль я добавил пользователя с полем: openid_identifier, установленным для одного, которым я управляю. Все идет нормально. Но попытка создать новую сессию терпит неудачу с этой ошибкой:

Processing UserSessionsController#create (for 127.0.0.1 at 2009-12-31 11:35:59) [POST] 
    Parameters: {"commit"=>"Login", "user_session"=>{"openid_identifier"=>"richdev.myopenid.com"}, "authenticity_token"=>"BcsIKNpumqZrTV/bdSLQ6szBvq6kpaAIxJRmYgxySLU="} 
    OpenIdAuthentication::Association Load (0.3ms) SELECT * FROM "open_id_authentication_associations" WHERE ("open_id_authentication_associations"."server_url" = 'http://www.myopenid.com/server') 
    Generated checkid_setup request to http://www.myopenid.com/server with assocication {HMAC-SHA1}{4b3cf228}{mWlzhg==} 
    Redirected to http://www.myopenid.com/server?openid.assoc_handle=%7BHMAC-SHA1%7D%7B4b3cf228%7D%7BmWlzhg%3D%3D%7D&openid.ax.mode=fetch_request&openid.identity=http%3A%2F%2Frichdev.myopenid.com%2F&openid.mode=checkid_setup&openid.return_to=http%3A%2F%2Flocalhost%3A3001%2Fuser_sessions%2Fcreate%3Ffor_session%3D1%26_method%3Dpost%26open_id_complete%3D1%26openid1_claimed_id%3Dhttp%253A%252F%252Frichdev.myopenid.com%252F%26rp_nonce%3D2009-12-31T19%253A35%253A59ZUEd2eN&openid.trust_root=http%3A%2F%2Flocalhost%3A3001%2F 
    Completed in 15ms (DB: 0) | 302 Found [http://localhost/user_sessions] 


    Processing ApplicationController#index (for 127.0.0.1 at 2009-12-31 11:36:00) [POST] 
    Parameters: {"openid.mode"=>"id_res", "openid.return_to"=>"http://localhost:3001/user_sessions/create?for_session=1&_method=post&open_id_complete=1&openid1_claimed_id=http%3A%2F%2Frichdev.myopenid.com%2F&rp_nonce=2009-12-31T19%3A35%3A59ZUEd2eN", "openid.sig"=>"l+tfFAmeKsskHKlOYRoZF7yHM7Q=", "rp_nonce"=>"2009-12-31T19:35:59ZUEd2eN", "openid.op_endpoint"=>"http://www.myopenid.com/server", "for_session"=>"1", "openid.response_nonce"=>"2009-12-31T19:36:00ZBhX5fE", "openid1_claimed_id"=>"http://richdev.myopenid.com/", "openid.identity"=>"http://richdev.myopenid.com/", "open_id_complete"=>"1", "openid.assoc_handle"=>"{HMAC-SHA1}{4b3cf228}{mWlzhg==}", "openid.signed"=>"assoc_handle,identity,mode,op_endpoint,response_nonce,return_to,signed"} 

    ActionController::MethodNotAllowed (Only get, put, and delete requests are allowed.): 


    Rendered rescues/_trace (96.3ms) 
    Rendered rescues/_request_and_response (0.5ms) 
    Rendering rescues/layout (method_not_allowed) 

Проблема, кажется, происходит при перенаправлении назад от провайдера OpenId, в какой момент ApplicationController # индекс вызывается, вместо UserSessionsController # создать. Я не уверен, что это проблема OpenID или проблема с Warp Drive.

Как я могу связать приложение Authlogic/OpenID как Gem Warp Drive и получить аутентификацию для успешной работы?

Обновление: добавление явного определения ресурсов для user_session устраняет проблему. В routes.rb:

map.resources :user_sessions 

Не знаете, почему, и это, похоже, не требуется ни для какого другого контроллера.

ответ

0

Две вещи работали:

  1. Добавить явное user_session определение ресурса в routes.rb:

    map.resources: user_sessions

  2. Удалить маршруты по умолчанию в routes.rb из приложения используя драгоценный камень привода варпа.

0

Удаление маршрутов по умолчанию в routes.rb

 
    map.connect ':controller/:action/:id' 
    map.connect ':controller/:action/:id.:format' 

решил ужасающую проблему маршрутизации, где маршрутизация ресурсов в варп привода:

 
map.resources :users, :member => {:activate => [:post, :get]} 

создал URL:/пользователей /: id/activate (.: format)

Но HTTP-запрос к этому URL-адресу привел к: действию и: возврату идентификатора ed при передаче контроллеру (как если бы он интерпретировался как URL по умолчанию). например

 
Parameters = {"action"=>"123456", "id"=>"activate", "controller"=>"users"} 

Не очень. Удалили по умолчанию маршруты в драйвере warp или клиентское приложение. Однако, безопаснее делать это в клиентском приложении.

 Смежные вопросы

  • Нет связанных вопросов^_^