2009-12-31 7 views
0

Warp Drive은 다른 레일 애플리케이션에서 사용하기 위해 전체 Rails 애플리케이션을 Gem으로 패키징하는 좋은 방법입니다. Warp Drive에서 내가 만드는 블로깅 엔진에서 작동하도록했습니다. 한 가지 문제가 있습니다. Authlogic OpenID 인증이 실패합니다.워프 드라이브를 사용하여 Authlogic/OpenID 인증 실패

나는 bare-bones OpenID example application을 만들었습니다. 나는 문제없이 보석으로 컴파일 할 수있다 :

$ warpify 
$ rake warp_drive:compile 

나는 내 시스템에 컴파일 된 보석을 설치했다. 빈 레일스 프로젝트를 만들면 다음과 같이 실행했습니다.

$ install_warp_drive rails-openid 

get this project here 수 있습니다. 내 빈 레일 프로젝트에서

, 나는 (내가 아마이에게 길을 잘못하고 있어요) environment.rb을 통해 보석을 구성하는 데 필요한 :

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

가 빈 레일 응용 프로그램 작업을 진행하기를, 나는 갈퀴 DB를 실행 : 마이그레이션 , 콘솔을 통해 : 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) 

문제는 UserSessionsController 번호가 만드는 대신, 다시 포인트와 ApplicationController # 지수가 호출되는되는 오픈 ID 공급자에서 리디렉션하는 동안 발생하는 것 같습니다. OpenID 문제인지 워프 드라이브 문제인지 확실하지 않습니다.

어떻게 Authlogic/OpenID 응용 프로그램을 Warp Drive Gem으로 묶어 인증 할 수 있습니까?

업데이트 : user_session에 대한 명시 적 리소스 정의를 추가하면 문제가 해결됩니다. routes.rb에서 :

왜 다른 컨트롤러에서는 필요하지 않은 것으로 보입니다.

답변

0

두 가지 일 : 응용 프로그램의 routes.rb에

  • 제거 기본 경로를 user_sessions :

    map.resources :

    1. 가 routes.rb에 명시 적 user_session 자원 정의를 추가 워프 드라이브 젬 사용.

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

      URL을 생성 : routes.rb에서

  • 0

    제거 기본 경로는

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

    가 워프 드라이브에 리소스 라우팅 끔찍한 라우팅 문제를 해결/사용자/: id/activate (. : 형식)

    하지만 해당 URL에 대한 HTTP 요청으로 인해 : action 및 : id가 역전되었습니다. 컨트롤러에 전달 될 때 (기본 URL로 해석되는 것처럼). 예 :

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

    예쁘지 않습니다. 워프 드라이브 또는 클라이언트 응용 프로그램에서 기본 경로를 제거하면 해당 경로가 제거됩니다. 클라이언트 응용 프로그램에서이를 수행하는 것이 더 안전하다고 생각됩니다.

    관련 문제