6

json認証を設定できました。次のコードを実装しました。

class Users:: SessionsController < Devise::SessionsController
  def create
    respond_to do |format|  
      format.html { super }  
      format.json {  
        warden.authenticate!(:scope => resource_name, :recall => "#{controller_path}#failure")  
        render :json => {:success => true}  
      }
    end  
  end

  def destroy
    respond_to do |format|
      format.html {super}
      format.json {  
        Devise.sign_out_all_scopes ? sign_out : sign_out(resource_name)
        render :json => {}
      }
    end
  end

  def failure
    render :json => {:success => false, :errors => ["Login Failed"]}
  end
end

これは正常に機能しますが、認証が失敗した場合、失敗してもjsonの失敗は返されません。考案のためのカスタム失敗があります。redirect_urlを削除するか、顧客の失敗を完全に削除すると、認証は失敗メッセージとともにjsonを返します。私のカスタム失敗は次のとおりです。

class CustomFailure < Devise::FailureApp
  def redirect_url
    #return super unless [:worker, :employer, :user].include?(scope) #make it specific to a scope
     '/'
  end

  # You need to override respond to eliminate recall
  def respond
    if http_auth?
      http_auth
  else
    redirect
  end
end

終わり

とにかく、htmlリクエストの場合はリダイレクトを維持し、jsonリクエストの場合は失敗メッセージでjsonを返しますか?

ありがとう!

4

1 に答える 1

5

そのカスタム障害を使用するように監視員に指示する必要があります。

def failure
  respond_to do |format|
    format.html {super}
    format.json do
      warden.custom_failure!
      render :json => {:success => false, :errors => ["Login Failed"]}
    end
  end
end
于 2012-09-19T16:36:18.010 に答える