繁体   English   中英

令牌与angularjs

[英]Token with angularjs

我当前的问题是如何使用令牌将注册路由重定向到首页路由。 该路由的后端确实会创建令牌,但是对于前端,我无法弄清楚该怎么做。

.controller('UserCreateController', function(User, $location, $localStorage) {

var vm = this;


// function to create a user
vm.SignUpUser = function() {
    vm.processing = true;

    // clear the message
    vm.message = '';

    // use the create function in the userService
    User.create(vm.userData)
        .success(function(data) {
            vm.processing = false;

            // clear the form
            vm.userData = {};
            vm.message = data.message;

              // What should i do here to get the token?
              $location.path('/')

    });

};

})

service.js

userFactory.create = function(userData) {

        return $http.post('/api/signup', userData);

    }

这是服务,如何与令牌一起退还

更新的版本 :这是我在用户注册后生成令牌的节点/表达式中的Api

api.js

var createToken = function(user) {

    var token = jwt.sign({
        id: user._id,
        name: user.name,
        username: user.username
    }, superSecret, {
        expiresInMinute: 1440
    });

    return token;

}





    apiRouter.post('/signup', function(req, res) {

            var user = new User({
                name: req.body.name,
                username: req.body.username,
                password: req.body.password
            });

            var token = createToken(user);
            user.save(function(err) {
                if(err) { 
                    res.send(err);
                    return;
                }

                res.json({
                    success: true, 
                    message: 'User has been created!',
                    token: token
                });
            });

我不知道如何将api生成的json数据传递给angular。

首先,您需要从响应头中检索令牌,因此将服务更新为:

userFactory.create = function(userData) {
    return $http.post('/api/signup', userData)
        .then(function(data, status, headers, config, status) {
           return data;
        });
}

然后您可以从控制器读取令牌

User.create(vm.userData)
    .then(function(data) {
        vm.processing = false;

        vm.userData = {};
        vm.message = data.message;

        // remember to reference $window in your controller
        $window.localStorage.setItem('token', data.token);
        $location.path('/')

});

用户登录或注册后,下次将请求发送到后端时,可以将令牌手动添加到标头中。

var req = {
 method: 'POST',
 url: 'http://example.com',
 headers: {
   'Authentication': $window.localStorage.getItem('token')
 },
 data: { test: 'test' },
}

$http(req).success(function(){...}).error(function(){...});

您发布的代码看起来不错。 如果您通过服务器API调用将此令牌作为JSON结果的一部分返回,则您应该能够在success方法中将其作为data变量上的属性进行访问。

使用Chrome(F12)中开发人员工具的“网络”标签,调用/api/signup会看到服务器返回了什么? 您在那看到令牌吗?

暂无
暂无

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

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