0

ユーザーがフォームフィールドにemail_id列を含む詳細を入力できるフォームがあります

ユーザーがログインしている場合、次のリンクが表示されます

" NOT USER NAME " 例 " NOT VIREN NEGI " は、デバイス セッションを破棄するための ajax リクエストとなる電子メール フィールドに対するものです。

ユーザーがリンクをクリックすると、devise セッションが破棄され、ajax が成功すると、上記のアンカー タグが消えます。

このソリューションは、Devise の destroy メソッドに Moneypatch を適用することで実装しました。

class DeviseSessionsController < DeviseController

  def destroy
    .... DEVISE CODE ...
    .... DEVISE CODE ...
    .... DEVISE CODE ...

     respond_to do |format|
       if request.xhr? **## My Hack**
         format.js { render :partial => 'users/signout' } **## render signout partial on ajax request** 
       else 
         format.any(*navigational_formats) { redirect_to redirect_path }
        format.all do
          method = "to_#{request_format}"
          text = {}.respond_to?(method) ? {}.send(method) : ""
          render :text => text, :status => :ok
       end
     end 
    end
  end
end

これはすべて機能しているように見えますが、それ以来、私はこれに満足していません

  1. devise が更新され、将来的に destroy メソッドが現在とは異なるように見える可能性がある場合は適していません
  2. 私はdevise/sessions_controllerの他のすべてのアクションメソッドをコピーして、deviseが問題なく動作するようにしました

誰でもこれについて私を助けてくれますか

モンキーパッチが悪いと答えて、質問が投稿された理由をすべてモンキーパッチについて読むように頼むのは避けてください(私はそれを知っています)。

ありがとうございました

4

2 に答える 2

2

デバイスヘルパーメソッドのサインアウトを使用できます

ユーザーコントローラー内にアクションを作成する

def log_me_out 
   signed_out = (Devise.sign_out_all_scopes ? sign_out : sign_out(resource_name))
    respond_to do |format|
      format.js  { render :partial => 'log_me_out',:layout => false }
    end
end

これにより、devise#sessions コントローラーにお金をパッチする必要がなくなります

この助けを願っています

于 2012-04-24T07:59:55.130 に答える
0

リクエストに csrf メタ タグを追加する必要があります。これは問題ではなく、工夫だと思います。

これで解決するはずです

$.ajaxSetup({
  'beforeSend': function(xhr) { xhr.setRequestHeader('X-CSRF-Token', $("meta[name='csrf-      token']").attr('content')); }
});
于 2012-04-23T13:13:20.477 に答える