使用ng-token-auth和devise-token-auth在客户端注销后,为什么我在服务器端保持身份验证

时间:2015-02-25 19:03:54

标签: ruby-on-rails angularjs authentication devise

我正在使用rails来创建angularjs使用的API。 我正在使用gems devise devise_token_auth和angularjs模块ng-token-auth来管理我的应用程序的会话。我的应用程序使用默认配置。

这个模块有两个问题。

首先,当我使用真实帐户登录时,我会登录前端并按原样查看主页,但是当我加载需要身份验证的api Url时,除非我刷新,否则会收到404 Unauthorized Error几次主页(我刚登录的地方)。

我认为第二个问题是,当我登录服务器端和客户端,然后我在客户端注销时,我没有退出服务器端。我通过加载需要身份验证的相同Api Url来测试它,在我退出之前和之后我仍然收到json数据,而current_user变量仍然包含已登录的用户。

这是我的/ login和/ logout的控制器。

var app = angular.module('app', ['ui.router', 'templates', 'ng-token-auth']);
app.controller('LoginController', function($scope, $auth, $state) {
    $scope.login = {};

    $scope.submitLoginForm = function(loginCredentials) {
        $auth.submitLogin(loginCredentials).then(function(resp) {
            //console.log('logged in successfully');
            $state.go('loginRequired.index');
        }).catch(function(resp) {
            // handle error response
        });
    };
});
app.controller('LogoutController', function($scope, $auth, $state, $http) {
    $auth.signOut().then(function() {
        //console.log("User logged out");
        $state.go('login');
    }).catch(function() {
        alert("Error");
    });
});

1 个答案:

答案 0 :(得分:0)

这可能是因为您有多个设计范围。你的config / routes.rb文件中有什么用于安装设备? devise_for,devise_scope,mount_devise_token_auth_for等

如果你在里面添加一个Warden回调,请输入:config / initializers / devise.rb 例如:

Warden::Manager.before_logout do |user,auth,opts|
  # opts[:scope] could be :user, :api_user, etc
end

您将看到不同的用户范围。