javascript - 解析服务器登录返回一个用户,但 req.user 未定义

标签 javascript node.js express parse-server

我正在尝试使用 Parse Server 建立一个简单的身份验证系统:

app.js

...

app.get('/login', (req, res) => {
    res.render('login.ejs');
});

app.post('/login', (req, res) => {
    console.log('POST /login\t' + util.inspect(req.body));
    driver.login(req, (err, user) => {
        //Here, user is defined
        if(err) {
            res.redirect('/login');
        } else {
            res.redirect('/user');
        }
    });
});

...

驱动程序.js:

...

function login(req, callback) {
    var username = req.body.username,
        password = req.body.password;
    Parse.User.logIn(username, password, {
        success: (user) => {
            callback();
        },
        error: (user, error) => {
            callback(JSON.stringify(error));
        }
    });
}

function isLoggedIn(req, callback) {
    console.log('isLoggedIn?');
    console.log(util.inspect(req.user)); //undefined
    if(req.user) {
        callback();
    } else {
        callback('Not logged in');
    }
}

...

当我访问 /login 时,我可以正常登录,并重定向到 /user 且没有任何错误,但在 /user 上,它使用 isLoggedIn 作为中间件,req.user 未定义。

我在搜索时看到其他人也有同样的问题,但该帖子要么旧(<2015),使用JSSDK的另一部分( react /浏览器),要么只是没有得到任何答案。

我知道我可以使用 session ,并基于此每次重新创建用户,但这感觉真的很黑客,这真的是受支持的方式吗?

最佳答案

您有两条路线要走,要么有一个 REST-full 服务器,这意味着用户在路线调用、STATE-full 和使用 session 之间不是持久的。

幸运的是,已经构建了一个非常好的 Nodejs 身份验证中间件,可以处理所有这些 session 管理。这就是所谓的passportJS。文档可以在这里找到:http://passportjs.org/docs

您不仅可以通过本地登录进行身份验证,还支持通过google、facebook、github等进行身份验证。这是通过所谓的策略来完成的。您可以使用 google-strategy 来进行 google oauth,使用 facebook-stradegy 来进行 facebook oauth,等等。

您需要的是本地策略,之所以这样称呼,是因为您想使用本地用户凭据进行身份验证。该策略可以在这里找到:https://www.npmjs.com/package/passport-local

您将需要护照和本地护照,并且只需运行即可安装

npm install passport passport-local

从那里,只需浏览我上面链接的文档即可了解如何设置所有内容。

关于javascript - 解析服务器登录返回一个用户,但 req.user 未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37949526/

相关文章:

javascript - 在没有 IP 地址的情况下在 Express 中提供静态文件

node.js - Node 找不到 express 模块?

javascript - 我正在尝试在程序中使用 Mongoose 模式,但它不断显示错误用户不是构造函数

node.js - Mongoose 在嵌入模式时分离文档?

javascript - 使用 getDay Javascript 获取明天的日期

javascript - 使用模块导出将模板文字与逻辑分开

javascript - ASPX Web 表单中的动态元素 Bootstrap

node.js - Skype 机器人以空 body 响应

node.js - Mongodb查找数组长度大于指定大小

javascript - Stripe checkout 在 Angular 1.x 中不起作用