首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >flask-security ajax注销导致会话错误

flask-security ajax注销导致会话错误
EN

Stack Overflow用户
提问于 2014-01-08 06:47:26
回答 2查看 525关注 0票数 3

当我发布到flask端点时:

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

下次尝试登录时出现错误

代码语言:javascript
复制
InvalidRequestError: Object '<User at 0x7f09b4831c90>' is already attached to session '1' (this is '4')

我想知道如何使用ajax安全地注销和登录。

编辑- angularjs登录控制器:

代码语言:javascript
复制
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;
    }
      );
    };
  }
EN

回答 2

Stack Overflow用户

发布于 2014-01-08 06:51:55

我猜您必须在结束时重定向才能退出现有会话

代码语言:javascript
复制
@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
EN

Stack Overflow用户

发布于 2014-01-17 10:58:24

你做这件事大错特错了。

由于您没有提供登录方法,我从错误日志中猜测您在会话中存储了一个用户模型。这是完全错误的。

我的建议是将用户的id存储在会话中。例如:

代码语言:javascript
复制
def login_user(user):
    session['user_id'] = user.id

如果您需要知道当前用户:

代码语言:javascript
复制
def get_current_user():
    return User.get(session['user_id'])

提出正确的问题,这样人们才能帮助你。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20983588

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档