1

バックボーンを使用して、Devise (Rails の認証ジェム) で認証を実装しようとしています。ユーザーは DELETE リクエストを送信してバックボーンからサインアウトできる/users/sign_out/ため、このリンクをクリックすると GET リクエストになるため、このリンクを機能させることができませんでした。

<li><a href="/users/sign_out" class="thumbnail plain">sign out</a></li>

次に、User モデルでログアウト メソッドを作成しましたが、それをトリガーするには、(明らかに) user モデルのインスタンスが必要です。ルートに移動することによってトリガーされるログアウト メソッドをルーターに作成しましたが、そのインスタンスを使用してユーザー モデルをlogout呼び出すことしかできないためlogout、ログアウトを呼び出すためだけにログアウト メソッドに新しいモデルを作成しています。

    "logout": "logout"

    },

    logout: function(){
     var foo = new app.Models.User
     foo.logout();

    }

これは明らかに悪い考えですが、他に何をすべきかわかりません。代わりに私がすべきことをお勧めできますか?ログアウトなどのために新しいモデルをインスタンス化する必要がないように、ログアウトをクラスメソッドにする方法はありますか?

アップデート

これは、デバイスに登録データを送信する User モデルの createUser メソッドです。成功のコールバックでは、セッションを変数に割り当てますwindow.app.current_user = userSession;。このようにルーターから呼び出そうとするユーザーモデルにもログアウトメソッドがあります

ルーターでログアウト

logout: function(){  
    window.app.current_user.logout();
    }

--

app.Models.User = Backbone.Model.extend({
      initialize:function () {       

    }, 
    createUser: function() {
    var user = {};
    user['email'] = this.get("email");
    user['password'] = this.get("password");
    user['password_confirmation'] = this.get("password_confirmation");
    var registration = {};
    registration['user'] = user; 
  var _this = this;
  $.ajax({
    url: '/users.json',
    type: "POST",
    data: {user: user, registration: registration},
    success: function(userSession, response) {

      window.app.current_user = userSession;

    },

   ... code ommitted

logout: function(){
  var me;
  console.log("Logging out...");
  me = this;
  return $.ajax({
    url: '/users/sign_out',
    type: "DELETE",
    dataType: "json",
    success: function(data, textStatus, jqXHR) {
       window.app.current_user = '';

    },
    error: function(jqXHR, textStatus, errorThrown) {
      return alert("Error logging out: " + errorThrown);
    }
  });

}, 
4

1 に答える 1