我已经看到了一些关于此问题的问题,但对于Angular和Node都是新手,我正在努力寻找合适的解决方案。
我有这个代码,它适用于登录,我只能在经过身份验证后访问我的页面:
router.post('/login',
passport.authenticate('local',
{
successRedirect: '/',
failureRedirect: '/login',
failureFlash: false,
successFlash: false
}
));
router.all('*', ensureAuthenticated);
function ensureAuthenticated(req, res, next) {
console.log("in ensureAuth", req.isAuthenticated());
console.log("session data", req.session);
console.log("user data", req.user);
if (req.isAuthenticated())
{
return next();
}
res.redirect('/login');
}
本地护照身份验证我验证用户是否存在并允许登录后返回一个对象,如下所示:
return passportDone(null, result.rows[0]);
result.rows [0]是我想要的用户信息。
我在前端的内容是一个简单的ng-submit,其形式称为“登录(凭证)”,凭据由ng-model在各自的字段(用户名和密码)中设置。
我的问题是如何返回我想要的所有信息,例如user_role,name和stuff,所以我可以将它作为{{user.name}}显示在前端?
刷新后信息需要保留,所以$ scope不是我读过的选项。
答案 0 :(得分:1)
您可能想要做的是创建一个用于获取此信息的自定义路由。例如:" / me"。
在此路线中,您可以提供现在可能存储在会话变量中的信息。
另一种解决方案,取决于您的应用程序如何使用身份验证,是注入userinfo(例如,如果您登录,并重定向到新页面,您可以将userinfo作为js变量注入新页面)或者,如果您向登录发送ajax请求并且没有被服务器重定向到新页面,则返回响应中的userinfo。
答案 1 :(得分:0)
我希望您使用passport.js
本地身份验证。我建议在使用json webtoken或使用其他加密功能在Cookie中进行身份验证后存储用户信息。您应该公开api(/ api / is-authenticated用于通过发送存储在cookie中的令牌来检查用户是否经过身份验证。当您刷新或导航到其他路由时,进行api(/ api / is-authenticated)调用以检查该特定用户是否已经过身份验证或不。
答案 2 :(得分:0)
好的,我明白了。
我已经有了这项服务,但问题在于护照的成功重定向。它会在成功时返回你想要的html,这很好。但是,由于我想要用户信息,因此还不够。我所做的是创建一个/ account路由,返回req.user信息,然后我在前端处理并与之形成一个cookie。基本上发生的是:
post_login-> verify_user->成功 - > get_account-> form_cookie-> render_html