令牌 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);
}
这是服务,我如何使用令牌return它
更新版本:这是我在 node/express 中的 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。
您发布的代码看起来不错。如果您 return 此令牌作为来自您的服务器 API 调用的 JSON 结果的一部分,您应该能够在 data
上作为 属性 访问它success
方法中的变量。
使用 Chrome (F12) 中开发人员工具的网络选项卡,您在调用 /api/signup
时从服务器看到 return 什么?你看到那里的令牌了吗?
首先,您需要从响应 headers 中检索令牌,因此请将您的服务更新为:
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('/')
});
用户登录或注册后,下次向后端发送请求时,您可以手动将令牌添加到headers。
var req = {
method: 'POST',
url: 'http://example.com',
headers: {
'Authentication': $window.localStorage.getItem('token')
},
data: { test: 'test' },
}
$http(req).success(function(){...}).error(function(){...});
我目前的问题是如何使用令牌将注册路由重定向到主页路由。这条路线的后端确实创建了令牌,但对于前端我不知道该怎么做。
.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);
}
这是服务,我如何使用令牌return它
更新版本:这是我在 node/express 中的 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。
您发布的代码看起来不错。如果您 return 此令牌作为来自您的服务器 API 调用的 JSON 结果的一部分,您应该能够在 data
上作为 属性 访问它success
方法中的变量。
使用 Chrome (F12) 中开发人员工具的网络选项卡,您在调用 /api/signup
时从服务器看到 return 什么?你看到那里的令牌了吗?
首先,您需要从响应 headers 中检索令牌,因此请将您的服务更新为:
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('/')
});
用户登录或注册后,下次向后端发送请求时,您可以手动将令牌添加到headers。
var req = {
method: 'POST',
url: 'http://example.com',
headers: {
'Authentication': $window.localStorage.getItem('token')
},
data: { test: 'test' },
}
$http(req).success(function(){...}).error(function(){...});