2

Rails アプリでの認証に Warden を使用しようとしています。POSTリクエストを介して通常のフォームで使用すると、正常に動作します。しかし、それを Backbone.js に移動すると、認証されていることがわかりました! メソッドは常に私の失敗アプリを呼び出します。

認証の中にいくつかのロギングを入れました!メソッドを実行すると、params ハッシュが空であることがわかりました。そのように:

def authenticate!
    Rails.logger.debug "Parameters inside of Warden: #{params}"
    user = User.find_by_email(params['email'])
    if user && user.authenticate(params['password'])
      success! user
    else
      fail "Invalid email #{request.params['email']} or password #{request.params['password']}!"
    end
end

空の出力が生成されます: Warden 内のパラメーター: {}

同時に、env['warden'].authenticate! の前にコントローラーのパラメーターを確認できます。と呼ばれます。パラメータがどこに行ったのかを推測することしかできません。私は何を間違っていますか?

4

1 に答える 1

2

私はRailsを初めて使用するので、私の解決策は些細なことかもしれません。しかし、それに関連するものは何も見つからなかったので、誰かに役立つかもしれません.

要点は、Warden が Rack::Request をインスタンス化して、params ハッシュへのアクセスを取得することです。また、「application/x-www-form-urlencoded」と「multipart/form-data」のみをサポートしています。 http://rack.rubyforge.org/doc/classes/Rack/Request.html#M000275

おそらく、コントローラーで使用される別のパーサーがあるため、混乱しました。最後に、外部のラックベースのパーサーで修正しました: https://github.com/achiu/rack-parser

于 2012-06-14T22:17:41.733 に答える