4

ユーザーを認証する2つの方法があるアプリケーションをアップグレードしています。

  1. before_filter :authenticate_user!コールバックがあり、標準のRailsサイトのようにアクセスされるコントローラー。
  2. クライアント側アプリケーションによってJSONを介してアクセスされるAPIモジュール内のコントローラー。/api/session_id/プレフィックスのみを持つ認証アクションを除いて、すべてのルートにプレフィックスがあります/api

Userどちらの方法でも、モデルを使用してユーザーを認証します。

両方をサポートするようにデバイスを構成する方法はありますか?どのように?

注:JSONを使用してユーザーを作成したくありません。それらを認証したいだけです。

4

2 に答える 2

0

これは、deviseのセッションコントローラーをオーバーライドすることで行いました。

カスタムセッションコントローラのルートにエントリを追加します。

 devise_for :users, :controllers => {:sessions => 'sessions'}

そして、セッションコントローラーをオーバーライドします。

  class SessionsController < Devise::SessionsController

    def create
      resource = warden.authenticate!(:scope => resource_name, :recall => "sessions#failure")
      return sign_in_and_redirect(resource_name, resource)
    end

    def sign_in_and_redirect(resource_or_scope, resource=nil)
      scope = Devise::Mapping.find_scope!(resource_or_scope)
      resource ||= resource_or_scope
      sign_in(scope, resource) unless warden.user(scope) == resource
      respond_with do |format|
        format.json  {render :json => {:success => true} }
        format.any  {super}
      end
    end

    def failure
      respond_with do |format|
        format.json  {render:json => {:success => false, :errors => ["Login failed."]} }
        format.any  {redirect_to :back, :notice => "Wrong Email / Password" }
      end
      #return render:json => {:success => false, :errors => ["Login failed."]}
    end

  end

" Rails&Devise:Override SessionsControllerは、同じテーマに関するより多くの議論です。

于 2012-12-14T16:26:22.897 に答える
0

監視するための新しいstategyを作成することになりました。

valid?メソッドparams[:controller]では、API名前空間からのものかどうかを確認します。このように、httpによるデフォルトのデバイス認証には触れませんでした。

于 2012-12-19T11:26:31.600 に答える