2013-09-16 3 views
1

Я пытаюсь реализовать аутентификацию с помощью Devise (жемчужина проверки подлинности для Rails) с использованием Backbone. Пользователи могут выйти из Backbone, отправив УДАЛИТЬ запрос на /users/sign_out/, так что я не мог получить ссылку на работу, потому что, если я нажму его это запрос GETметоды класса в базовой линии

<li><a href="https://stackoverflow.com/users/sign_out" class="thumbnail plain">sign out</a></li> 

Затем я создал метод выхода из системы на модели пользователя, но для его запуска у меня должен быть экземпляр модели пользователя (очевидно). Я создал метод выхода в маршрутизатор, который запускается при навигации по маршруту logout, но поскольку я могу только позвонить logout в пользовательской модели с его экземпляром, я создаю новую модель в методе выхода из системы, чтобы вызвать выход из системы ,

"logout": "logout" 

    }, 

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

    } 

Это, очевидно, плохая идея, но я не знаю, что еще делать. Можете ли вы порекомендовать то, что я должен делать вместо этого? Есть ли способ сделать выход из класса методом класса, поэтому мне не нужно создавать новую модель только для выхода из системы или чего-то еще?

Обновление

Это метод 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); 
    } 
    }); 

}, 

ответ

2

Я немного запутался, почему вы бы хотите вызвать функцию выхода из системы, если модель пользователя еще не создана. Не могли бы вы объяснить свои аргументы в пользу того, что эта функция выхода в вашем маршрутизаторе?

Лично у меня была бы модель сеанса, которая прослушивает событие click вашей ссылки. Затем это вызовет метод выхода из системы, который сделает запрос DELETE.

UPDATE

Вот быстрый JsFiddle, который показывает создание модели и приложив ее к глобальной переменной: http://jsfiddle.net/Francium123/eBG3E/2/

var User = Backbone.Model.extend({ 
    initialize:function() {  
     this.name = "MyName"; 
     this.password = "password" 
    }, 

    login:function(){ 
     console.log("login called"); 
    }, 

logout: function(){ 
     console.log("logout called"); 
    } 
}); 

window.MyModels = window.MyModels || {}; 
window.MyModels.User = new User(); 

console.log(window.MyModels.User.login()); 
console.log(window.MyModels.User.logout()); 

Обратите внимание, что это всего лишь пример, я сомневаюсь, что ты хотел бы сохранить пароль в модели!

Кроме того, вы должны использовать методы выборки Backbone Models (GET), сохранить (POST/PUT), уничтожить (DELETE) вместо того, чтобы писать запросы ajax непосредственно в модели. В случае необходимости вы можете переопределить метод синхронизации моделей.

+0

У меня также есть метод входа в модель пользователя. Пользователь входит в систему, но у меня нет сеанса. Если у меня была модель сеанса с методом выхода из системы, то мне все еще нужно иметь экземпляр сеанса, доступный для входа в систему, что похоже на проблему с модель пользователя, которую я описываю. Однако я уверен, что делаю все неправильно, поэтому, если вы можете указать указателям на то, как сохранить сессию в javascript, чтобы я мог вызвать выход из системы, это было бы очень полезно. – Leahcim

+0

@Leahcim: если у вас есть пользователь что вы вызываете «login», то почему бы не сохранить ссылку на этого пользователя где-нибудь, чтобы вы могли называть его «logout»? –

+0

@muistooshort так просто назначить ответ от входа в переменную currentUser в обратном вызове успеха (для входа в систему)? сохранить этот currentUser глобальной переменной? – Leahcim

Смежные вопросы