注册后自动登录

时间:2015-11-18 18:00:22

标签: javascript angularjs mean-stack mean.io

创建帐户后,用户应该登录并重定向到主页。但不知怎的,它不起作用。

因为它确实转到了主页,但用户仍然没有登录。但它确实转到了passport.use()函数。 (我在控制台上记录了这个)。这证明了这一点:

POST /api/myTheme/register 200 362 - 54.324 ms

POST /api/login 200 362 - 46.108 ms

下面你可以看到我的代码:

myApp.factory('MyTheme', function($http, $location) {
    return {
        register: function(user) {
            return $http.post('/api/myTheme/register', { 
                email: user.email,
                password: user.password,
                confirmPassword: user.confirmPassword,
                username: user.username,
                name: user.name
            }).then(function successCallback(response) {
                $http.post('/api/login', {
                    email: user.email,
                    password: user.password
                });

                $location.path( "/" );

            }, function errorCallback(response) {

            });
        }
    };
});

可能的解决方案

当我改变路径时,帖子可能还没有完成。所以可能的解决方案是使用另一个.then()函数。在函数体内,我只有这行代码:

$location.path( "/" );

但我真的不知道如何放置.then()函数。

2 个答案:

答案 0 :(得分:2)

只需链接Promise s:

return {
    register: function(user) {
        return $http.post('/api/myTheme/register', { ... })
                .then(function successCallback(response) {
                    return $http.post('/api/login', { ... }
                )
                .then(function successfulLogin(response) {
                    $location.path( "/" );
                })
                .catch(function errorCallback(response) { ... });
    }
};

请注意,您可以在一个级别链接承诺,这使您的代码更具可读性,并允许您使用catch来处理任何承诺引起的任何错误。

答案 1 :(得分:0)

当你注意到你在帖子完成之前改变路径时,我认为你走在了正确的轨道上。您只需将.then()附加到帖子的末尾即可/ / api / login,就像发布到/ api / mytheme / register

一样

喜欢这样

myApp.factory('MyTheme', function($http, $location) {
    return {
        register: function(user) {
            return $http.post('/api/myTheme/register', { 
            email: user.email,
            password: user.password,
            confirmPassword: user.confirmPassword,
            username: user.username,
            name: user.name
        }).then(function successCallback(response) {
            $http.post('/api/login', {
                email: user.email,
                password: user.password
            }).then(function(response){  /***********change here***********/
                $location.path( "/" );
            });
        }, function errorCallback(response) {

        });
    }
};

});