0

Warp Driveは、Rails アプリケーション全体を Gem にパッケージ化して、他の Rails アプリケーションで使用できるようにする優れた方法です。私が作成しているブログ エンジンでワープ ドライブを動作させることができました。1 つだけ問題があります。Authlogic OpenID 認証が失敗することです。

最低限の OpenID サンプル アプリケーションを作成しました。問題なく gem にコンパイルできます。

$ warpify
$ rake warp_drive:compile

次に、コンパイルした gem をシステムにインストールしました。空の Rails プロジェクトを作成して、次のコマンドを実行しました。

$ install_warp_drive rails-openid

このプロジェクトはこちらから入手できます。

私の空白の Rails プロジェクトでは、environment.rbを使用して gem を構成する必要がありました(おそらく、これは間違った方法で行っているのでしょう)。

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

空の Rails アプリケーションを動作させるために、rake db:migrate を実行し、コンソールから :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 プロバイダーからのリダイレクト中に発生するようであり、その時点で、UserSessionsController#create の代わりに ApplicationController#index が呼び出されます。これが OpenID の問題なのかワープ ドライブの問題なのかはわかりません。

Authlogic/OpenID アプリケーションを Warp Drive Gem としてバンドルし、認証を正常に機能させるにはどうすればよいですか?

更新: user_session の明示的なリソース定義を追加すると、問題が修正されます。routes.rb で:

map.resources :user_sessions

理由はわかりませんが、これは他のコントローラーには必要ないようです。

4

2 に答える 2

0

routes.rb でデフォルト ルートを削除する

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

ワープ ドライブのリソース ルーティングに関する恐ろしいルーティングの問題を解決しました。

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

URL を作成しました: /users/:id/activate(.:format)

しかし、その URL への HTTP 要求は、コントローラーに渡されるときに :action と :id が逆になった (まるでデフォルトの URL として解釈されたかのように)。例えば

パラメータ = {"action"=>"123456", "id"=>"activate", "controller"=>"users"}

かわいくない。ワープ ドライブまたはクライアント アプリのデフォルト ルートを削除しました。ただし、クライアント アプリで実行する方が安全なようです。

于 2011-01-11T13:35:21.990 に答える
0

2つのことがうまくいきました:

  1. routes.rb に明示的な user_session リソース定義を追加します。

    map.resources :user_sessions

  2. warp drive gem を使用して、アプリの routes.rb のデフォルト ルートを削除します。

于 2010-01-03T15:47:59.027 に答える