【问题标题】:How do I access Passport's req.user variable in client side javascript?如何在客户端 javascript 中访问 Passport req.user 变量?
【发布时间】:2015-03-21 17:09:16
【问题描述】:

我在我的简单 Express 应用上设置了 Passport 身份验证,它工作正常,我让它在我的索引页面上显示 req.user,如下所示:

<% if (!isAuthenticated) { %>
    <a id="signIn" href="/login">Sign In</a>
<% } else { %>
    <h3 id="welcomeMsg"><%=user.id%></h3>
    <h2 id="userBalance"><%=user.balance%></h2>
    <a href="/logout">Log Out</a>
<% } %>

在 index.js 中:

app.get('/', function(req, res){
  res.render('index', {
     isAuthenticated: req.isAuthenticated(),
     user: req.user
});

});

我要做的是在我的公共目录中的客户端 js 文件中确认登录用户的用户名。使该变量在该文件中可用的最简单和最直接的方法是什么?

谢谢

【问题讨论】:

  • 你现在有什么问题?您只需要将它公开给您的客户端 JS,对吗?把它放在一个名称间隔的对象/模块/等中。
  • 你是说我需要将它存储在我的 index.js 中的一个对象中,并且它可以从客户端 js 文件中获得?我尝试了几种不同的方法,但它总是显示未定义,我不完全明白为什么我可以在我的 html 中使用 ejs 毫无问题地打印出来。
  • 不,我并不是说客户端和服务器是不同的进程。您需要渲染 JS,然后从客户端访问。就我个人而言,我更喜欢通过额外的 http 调用来获取您已经知道的数据。

标签: javascript node.js express passport.js


【解决方案1】:

由于passport.js 使用cookie 来维持会话, 您可以在应用程序中添加一个简单的路由,以 json 格式提供当前记录的用户数据:

app.get('/api/user_data', function(req, res) {

            if (req.user === undefined) {
                // The user is not logged in
                res.json({});
            } else {
                res.json({
                    username: req.user
                });
            }
        });

并使用您的客户端 javascript 使用 jQuery.getJSON() 或任何其他可以 GET 请求 json 内容的方法访问它。

jQuery.getJSON() 为例:

$.getJSON("api/user_data", function(data) {
    // Make sure the data contains the username as expected before using it
    if (data.hasOwnProperty('username')) {
        console.log('Usrename: ' + data.username);
    }
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-06-10
    • 1970-01-01
    • 2017-04-04
    • 1970-01-01
    • 1970-01-01
    • 2023-04-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多