Javascript &引用;“获得认证”;在初始启动时循环forver
每当我第一次加载AngularJS应用程序时,我都会看到一个空白屏幕,试图检查用户是否在一个永无止境的循环中通过了身份验证 对于这个项目,我使用的是0.11.0版,AngularJS的最新版本,用于前端的东西,以及Bower和Yeoman(特别是Yeoman生成器)。我也在使用卫星,它应该对这个过程有很大的帮助 我只是在设置我的第一个登录和注册功能,所以我可能犯了一些简单的错误 更新:从Sails Gitter聊天室中一些乐于助人的人那里,我认为“没有向某个地方发送响应”——我被告知可能是错误的原因,来自一位经验丰富的开发人员。所以这可能是我的问题。。。。还不知道,只是不断更新这个问题 我的一些相关代码如下: 这是我的应用程序尝试将用户发送到的第一个状态(在app.js文件中): 这些是我的dashboard.auth服务的内容,我知道这对获得授权工作至关重要Javascript &引用;“获得认证”;在初始启动时循环forver,javascript,angularjs,node.js,authentication,satellizer,Javascript,Angularjs,Node.js,Authentication,Satellizer,每当我第一次加载AngularJS应用程序时,我都会看到一个空白屏幕,试图检查用户是否在一个永无止境的循环中通过了身份验证 对于这个项目,我使用的是0.11.0版,AngularJS的最新版本,用于前端的东西,以及Bower和Yeoman(特别是Yeoman生成器)。我也在使用卫星,它应该对这个过程有很大的帮助 我只是在设置我的第一个登录和注册功能,所以我可能犯了一些简单的错误 更新:从Sails Gitter聊天室中一些乐于助人的人那里,我认为“没有向某个地方发送响应”——我被告知可能是错误的
var currentUser,
isAuthenticated = false,
baseAuth = Restangular.all('user');
return {
login: function (credentials) {
return baseAuth.customPOST(credentials, 'login').then(function (user) {
$log.debug('User logged in: ', user);
isAuthenticated = true;
return user;
});
},
logout: function () {
return baseAuth.customPOST({}, 'logout').then(function () {
currentUser = undefined;
isAuthenticated = false;
});
},
register: function (newUser) {
return baseAuth.customPOST(newUser, 'register').then(function (user) {
isAuthenticated = true;
return user;
});
},
currentUser: function () {
return currentUser;
},
isAuthenticated: function (force) {
var deferred = $q.defer();
if (isAuthenticated && currentUser) {
deferred.resolve(currentUser);
} else {
return baseAuth.customGET('authenticated').then(function (user) {
deferred.resolve(currentUser);
isAuthenticated = true;
currentUser = user;
return user;
});
}
return deferred.promise;
}
};
后端控制器:
注册
register: function (req, res) {
RegistrationService.registerUser(req.body, function (err, user) {
if (err) { res.json(400, err); }
return res.json(user);
});
},
登录
login: function (req, res) {
passport.authenticate('user', function (err, user, info) {
if (err) { return res.json(err); }
else if (user) {
req.logIn(user, function (err) {
if (err) { return res.json(err); }
return res.json(user);
});
} else { return res.json(400, info); }
})(req, res);
},
然后在后端有很多不同的代码,这些代码都应该是非常标准的,我试图遵循从教程中找到的最佳实践。如果你对我的申请有任何想法,请告诉我
下面是当我转到应用程序正在运行的地方时记录到控制台的错误(它在循环中不停地运行…)
[Array[0]、“get”、“authenticated”,
“”]angular.js:12314[“”,
“获取”、“已验证”、“已验证”
angular.js:12314[Array[0],“get”,“authenticated”,
“”]angular.js:12314[“”,
“获取”、“已验证”、“已验证”
angular.js:12314[Array[0],“get”,“authenticated”,
“”]angular.js:12314[“”,
“获取”、“已验证”、“已验证”
angular.js:12314[Array[0],“get”,“authenticated”,
“”]
好的,我在API中更改了控制器,在前端更改了app.js文件。所以问题就出在其中的某个地方 但我相信真正的问题在于后端逻辑 我去做了一个主要的简化。。。它成功了 将注册操作更改为:
register: function (req, res) {
User.create(req.body, function (err, user) {
if (err) { next(err); }
return res.json(user);
});
},
将登录操作更改为:
login: function (req, res, next) {
User.findOne( { email: req.body.email }, function (err, user) {
if (err) { return next(err); }
if (user) {
bcrypt.compare(req.body.password, user.password, function (err, valid) {
if (err) { next(err); }
if (valid) {
req.session.userAuthenticated = true;
req.session.authenticated = true;
req.session.User = user;
return res.json({
message: "Logged in"
});
}
});
} else { next({ message: "Could not find a user with email " + req.body.email }); }
});
},
这似乎成功了
login: function (req, res, next) {
User.findOne( { email: req.body.email }, function (err, user) {
if (err) { return next(err); }
if (user) {
bcrypt.compare(req.body.password, user.password, function (err, valid) {
if (err) { next(err); }
if (valid) {
req.session.userAuthenticated = true;
req.session.authenticated = true;
req.session.User = user;
return res.json({
message: "Logged in"
});
}
});
} else { next({ message: "Could not find a user with email " + req.body.email }); }
});
},