繁体   English   中英

$ window.sessionStorage用于登录和注销(基于令牌);

[英]$window.sessionStorage for login and logout ( token based);

我使用基于令牌的Node.js和Angular.js创建一个登录和注销功能。 我将令牌保存到窗口存储中。

问题是如果我注销它只是注销一个浏览器,并且如果我登录,它也无法识别我是否已经登录。 我想我必须扩展程序。

我的问题是如何删除登录到的每个打开的浏览器的存储空间? 还是应该在代码中询问我是否已登录以及如何执行此操作?

提前致谢!

NODE.JS代码

app.post('/logout', function(req, res){

    jwt.verify(req.body.token, 'secretKey', function(err, decoded) {
        console.log("Decoded " + decoded);
        if(decoded._id != null){
        User.findOne({
        _id : decoded._id
    }, function(err, user) {
        if (err) {
            console.log('Error occured', err);

        } else {
            if (user) {
                res.end();
            }

    }
    });
    }else{

        Console.log("Could not logout");
    }
    });

});

app.post('/login', function(req, res) {

    User.findOne({
        email : req.body.email
    }, function(err, user) {
        if (err) {
            console.log('Error occured', err);

        } else {
            if (user) {

                // check if password matches
                if (req.body.password != undefined) {
                    var hashPWCheck = bcrypt.compareSync(req.body.password, user.password);
                    // true
                    //console.log(hashPWCheck);
                    if (!(hashPWCheck)) {
                        res.json({
                            success : false,
                            message : 'Authentication failed. Wrong password.'
                        });
                        console.log('Authentication failed. Wrong password.');
                    } else {
                        var token = jwt.sign(user, 'secretKey', {
                            expiresInMinutes : 60 // expires in 1 Minute
                        });

                        res.json({token : token, email : user.email});
                        console.log("Token created & sent to  Client(UserCtrlLogin): " + token);
                    }

                } else {
                    console.log("Password is required!");
                }

            } else {
                console.log("Incorect E-Mail");
            }

        }

    });
});

ANGULAR.js代码

app.controller('UserCtrlLogin', function($scope, $http, $window, $location, $rootScope) {

    $scope.logout = function(){
        var sessionlogout = $window.sessionStorage.getItem('token');


        var formData = {
            token : sessionlogout

        };  

    $http.post('/logout', formData).success(function(data, status, headers, config) {
        if(status == 200){


            $rootScope.isAlive = false;
            $rootScope.ali = false;
            $window.sessionStorage.removeItem('token');


        }else{
            $window.sessionStorage.removeItem('token');
            $rootScope.isAlive = false;
        }
        });      

    };


    $scope.signin = function() {

        var formData = {
            email : $scope.email,
            password : $scope.password
        };

        // $window.sessionStorage.removeItem('token');
        $http.post('/login', formData).success(function(data, status, headers, config) {
            console.log('Data: ' + data.email);
            //console.log('Status: ' + status);
            if (status == 200) {
                if(data.email == "goekguel.ali@gmail.com"){
                    $rootScope.ali = true;

                }

                $rootScope.isAlive = true;

                $window.sessionStorage.setItem('token', data.token);
                console.log("Token saved into Storage from Server(Node.js function /login)");



            }
        }).error(function(data, status, headers, config) {
            // called asynchronously if an error occurs
            // or server returns response with an error status.
            $window.sessionStorage.removeItem('token');
        });

    };

});

您需要将令牌保存在数据库中,如果您在一个浏览器中登录或注销,则必须将令牌标记为有效/无效,而在另一浏览器中,则需要检查后端的令牌状态。

Ps See satellizer ,这只是我对前端auth模块的建议。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM