如何在 passportjs 中将消息传递给客户端
How to passing message to client in passportjs
目前,我在从 nodejs 获取消息时遇到了问题
在客户端(与nodejs分离),
'use strict';
angular.module('app').controller('RegisterCtrl', function ($scope, alert, $auth) {
$scope.submit = function () {
$auth.signup({
email: $scope.email,
password: $scope.password
})
.then(function (res) {
alert('success', 'Account Created!', 'Welcome, ' + res.data.user.email + '! Please email activate your account in the next several days.');
})
.catch(function (err) {
alert('warning', 'Unable to create account :(', err.message);
});
};
});
虽然,在 Nodejs 通行证上我收到错误 "email already taken" 但它无法将此消息传递给客户端,客户端只收到 401(未授权)。
我还安装 connect-flash 并设置
app.post('/auth/register', passport.authenticate('local-register', {
failureFlash : true // allow flash messages
}), function (req, res) {
emailVerification.send(req.user.email, res, req);
createSendToken(req.user, res);
});
但仍然没有运气。我怎样才能得到这个消息?谢谢
Flash 消息设置为 req
且未在 HTTP 响应中返回。如果您要在服务器上呈现 HTML,您可以使用它,但它不适用于 AJAX。
虽然我不知道您为什么要使用身份验证库来处理注册,但您可以使用 custom callback 来实现。一个未经测试的例子:
app.post('/auth/register', function(req, res, next) {
passport.authenticate('local-register', function(err, user, info) {
if (err) return next(err);
if (user) {
req.logIn(user, function(err) {
if (err) return next(err);
emailVerification.send(req.user.email, res, req);
createSendToken(req.user, res);
});
// Register failed, flash message is in info
} else {
res.status(400).json(info);
}
})(req, res, next);
});
目前,我在从 nodejs 获取消息时遇到了问题
在客户端(与nodejs分离),
'use strict';
angular.module('app').controller('RegisterCtrl', function ($scope, alert, $auth) {
$scope.submit = function () {
$auth.signup({
email: $scope.email,
password: $scope.password
})
.then(function (res) {
alert('success', 'Account Created!', 'Welcome, ' + res.data.user.email + '! Please email activate your account in the next several days.');
})
.catch(function (err) {
alert('warning', 'Unable to create account :(', err.message);
});
};
});
虽然,在 Nodejs 通行证上我收到错误 "email already taken" 但它无法将此消息传递给客户端,客户端只收到 401(未授权)。 我还安装 connect-flash 并设置
app.post('/auth/register', passport.authenticate('local-register', {
failureFlash : true // allow flash messages
}), function (req, res) {
emailVerification.send(req.user.email, res, req);
createSendToken(req.user, res);
});
但仍然没有运气。我怎样才能得到这个消息?谢谢
Flash 消息设置为 req
且未在 HTTP 响应中返回。如果您要在服务器上呈现 HTML,您可以使用它,但它不适用于 AJAX。
虽然我不知道您为什么要使用身份验证库来处理注册,但您可以使用 custom callback 来实现。一个未经测试的例子:
app.post('/auth/register', function(req, res, next) {
passport.authenticate('local-register', function(err, user, info) {
if (err) return next(err);
if (user) {
req.logIn(user, function(err) {
if (err) return next(err);
emailVerification.send(req.user.email, res, req);
createSendToken(req.user, res);
});
// Register failed, flash message is in info
} else {
res.status(400).json(info);
}
})(req, res, next);
});