2014-01-07 3 views
3

Когда я отправляю в колбах конечной точку:колбовых безопасности Аякс выход из системы приводит к ошибкам сеанса

@app.route('/api/v1/logout', methods=['POST','GET']) 
def logout(): 
    logout_user() 
    return jsonify(status=200, message='User has been successfully logged out.') 

я получаю сообщение об ошибке при попытке войти в следующий раз

InvalidRequestError: Object '<User at 0x7f09b4831c90>' is already attached to session '1' (this is '4') 

Я задавался вопрос, как для выхода из системы и безопасного использования ajax.

Edit- angularjs контроллер Логин:

LoginController: function ($scope, $http, authService, $location) { 
    $scope.submit = function() { 
     console.log('in logincontroller') 
     $http.defaults.headers.post['X-CSRFToken'] = csrf_token; 
     $http.defaults.headers.common['Content-Type'] = 'application/json' 
     //debugger; 
     $http.post(
    '/login', 
     JSON.stringify({ email: $scope.email, password: $scope.password }) 
    ).success(
    function(data) { 
     if (data.meta){ 
     var status_code = data.meta.code; 
     } 
     else{ 
     var status_code = data.status; 
     } 
     if (status_code == 200){   
     $.cookie('email', $scope.email, { expires: 7 }); 
     $.cookie('auth_token', data.authentication_token, { expires: 7 }); 
     $http.defaults.headers.common['Authentication-Token'] = data.authentication_token; 
     authService.loginConfirmed(); 
     $location.path("/dashboard"); 
     } 
     else{ 
    //form stuff 
     } 
    } 
    ).error(
    function(data) { 
     alert('LoginController submit error'); 
     $scope.errorMsg = data.reason; 
     //debugger; 
    } 
    ); 
    }; 
    } 
+1

Можете ли вы показать код входа в систему ...? – Nix

ответ

0

Я думаю, вы должны перенаправить в конце, чтобы выйти из существующей сессии

@app.route('/logout') 
def logout(): 
    # remove the username from the session if it's there 
    session.pop('username', None) 
    return redirect(url_for('index')) 
+0

Это не устранило проблему. – user784756

+0

Это сеанс фляжки-sqlalchemy. – user784756

+0

Даже не перенаправлять в конце? – user2692263

-1

Вы делаете это очень неправильно.

Поскольку вы не указали свой метод входа в систему, я думаю, из журнала ошибок, что вы сохраняете модель пользователя в сеансе. Это совершенно неправильно.

Мое предложение состоит в том, что вы храните идентификатор пользователя в сеансе. например

def login_user(user): 
    session['user_id'] = user.id 

Если вам необходимо знать текущий пользователь:

def get_current_user(): 
    return User.get(session['user_id']) 

задать правильный вопрос, так что люди могут помочь вам.

+0

Предполагаю, что я должен был упомянуть, что использовал флеш-безопасность, которая находится в теге. Flask-security делает автоматически. – user784756