1

標準実装を介してユーザーを認証するためにDeviseを使用しています。ユーザーがログインすると、同じコントローラー (および Devise) を使用する REST API を呼び出すことができます。コントローラーは次のようになります。

class FriendController < ApplicationController
  before_filter :authenticate_user!
  def create
    ...
  end
  def destroy
    ...
  end
  def index
    ...
  end
end

authenticated_user! で動作する index アクションを取得しました。この場合、ユーザーが認証されると、index は 200 ステータス コードのデータを返します。ユーザーが認証されていない場合は、40x ステータス コードをindex返します。Unauthorized

ただし、呼び出し中create、またはdestroyPOST および DELETE を使用すると、アプリケーションから自動的にログアウトされ、40x Unauthorized エラーが返されます。これを前に見た人はいますか?何か案は?

これがroute.rbです

  resources :users do
    resources :friends, only: [:index, :friended_me, :create, :destroy]
  end

たとえば、これはdevise_scope :usersブロック内にある必要がありますか?

4

1 に答える 1

1

なぜこれが起こっているのか分かりました。でApplicationControllerprotect_from_forgeryが有効になっている場合。の API 呼び出しはPOST/PUT/DELETEをチェックしauth_tokenます。指定されていない場合、失敗します。ただし、 がGET指定されていない場合でも、ユーザーがログインしていればアクションは続行されます。

resource.reset_authentication_token!修正は、オーバーライド後に生成された auth_token を使用することですSessionsController#create

于 2012-06-14T22:31:51.830 に答える