注册后自动登录

After register automatically log in

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

因为它确实转到了主页,但用户仍未登录。但是它确实转到了 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) {

            });
        }
    };
});

可能的解决方案

我更改路径时 post 可能尚未完成。所以可能的解决方案是使用另一个 .then() 函数。在函数体内我只会有这行代码:

$location.path( "/" );

但是我真的不知道怎么放置.then()函数。

当您注意到在 post 完成之前更改路径时,我认为您走在了正确的轨道上。你只需要在你的 post 到 /api/login 的末尾附加一个 .then() 就像你对 post 到 /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) {

        });
    }
};

});

只需链接 Promises:

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) { ... });
    }
};

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