在NodeJS验证后如何使用AngularJS访问用户信息?

时间:2016-03-09 13:15:50

标签: javascript angularjs node.js passport.js

我已经看到了一些关于此问题的问题,但对于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不是我读过的选项。

3 个答案:

答案 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-&G​​T; render_html