Я пытаюсь реализовать аутентификацию с помощью 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);
}
});
},
У меня также есть метод входа в модель пользователя. Пользователь входит в систему, но у меня нет сеанса. Если у меня была модель сеанса с методом выхода из системы, то мне все еще нужно иметь экземпляр сеанса, доступный для входа в систему, что похоже на проблему с модель пользователя, которую я описываю. Однако я уверен, что делаю все неправильно, поэтому, если вы можете указать указателям на то, как сохранить сессию в javascript, чтобы я мог вызвать выход из системы, это было бы очень полезно. – Leahcim
@Leahcim: если у вас есть пользователь что вы вызываете «login», то почему бы не сохранить ссылку на этого пользователя где-нибудь, чтобы вы могли называть его «logout»? –
@muistooshort так просто назначить ответ от входа в переменную currentUser в обратном вызове успеха (для входа в систему)? сохранить этот currentUser глобальной переменной? – Leahcim