我尝试正确实现登录过程,我使用服务器渲染视图approch作为前端。根据sails.js官方文档中关于设置路由的内容,所以在我的routes.js中,我有这个:
module.exports.routes = {
'/': {
view: 'login'
},
// Server render HTML views
'POST /signup':'UserController.signup',
'PUT /login': 'UserController.login',
'GET /logout':'UserController.logout',
'GET /profile': 'PageController.showProfilePage',
'GET /dashboard': 'PageController.showDashboardPage',
'GET /products': 'PageController.showProductPage'
};
通常仪表板路线存在,所以我想要做的就是当我登录时,我会自动重定向到仪表板。 所以在我的UserController.js中,我有这个:
login : function (req, res){
//... some code here
success : function (){
if(userFound.deleted){
return res.forbidden("'Your account has been deleted.
Please visit ecommerce.com/restore to restore your account'");
}
if(userFound.banned){
return res.forbidden("'Your account has been banned
completly because you didn't respect the use term of our site");
}
// Store user id in a session
req.session.userId = userFound.id;
console.log(req.session);
res.redirect('/dashboard');
return;
}
})
})
}
最后,我有了我的PageController,我根据用户是否经过身份验证显示了所有不同的Web应用程序视图,在这种情况下是仪表板。所以,这是我的代码所说的:
showDashboardPage: function (req, res){
if(!req.session.userId){
console.log(req.session);
return res.redirect('/')
}
if(req.session.userId){
User.findOne(req.session.userId, function (err, user){
if(err){
console.log(req.session);
return res.negotiate(err);
}
if(!user){
console.log(req.session);
sails.log.verbose('Session refers to a user who no longer exist');
return res.redirect('/');
}
console.log(req.session);
return res.view('user/dashboard', {
layout: 'user/mainUserLayout',
me: {
id: user.id,
username: user.username,
fullname: user.fullname,
profilePicture: user.profilePicture,
admin: user.admin
}
});
});
}
}
当我登录时,我从服务器收到404未找到错误。我不知道我是否真的错过了什么。一些帮助将得到赞赏。 :)
答案 0 :(得分:0)
如果您收到404,则您返回的视图可能不在您指定的路径上。查看浏览器中的控制台日志,并检查它找不到的资源。从这里开始,你应该很容易推断出这个问题。如果只是在您登录后,我的怀疑是您的一条路径对您的某个视图不正确。
答案 1 :(得分:0)
这是因为登录的请求方法。
'PUT /login': 'UserController.login',
当您从登录操作执行res.redirect('/ dashboard')时,它将是/dashboard
上的PUT,由于PUT /仪表板没有路由,因此会产生404