使用带有passport.js的express.js从POST获取表单数据

时间:2018-03-30 18:37:29

标签: javascript node.js express passport.js

所以我建了一个聊天室,所有工作都很顺利,直到我改变了系统,只使用了uid heres一点关于它是如何工作的

当用户注册时,他会被分配一个放入数据库的uid及其凭据,因此每次用户登录时都会要求服务器获取与您在文本框中输入的用户名相关联的uid。将它设置为像这样的cookie

setCookies()在提交时被调用

function setCookies() {
    var username = document.getElementById("login-username").value
    console.log(username)
    getLoggedInUserInfo(username)
}
function getLoggedInUserInfo(username){     
console.log(username)
socket.emit('getLoggedInUserInfo',username)
}
socket.on('loggedInUserInfo',function(uid){
    document.cookie = "uid=" + uid;
})

但这是注册页面上的一个问题,因为用户在数据库上没有任何关于他的信息

所以我在想什么,如果我可以使用express在服务器端设置cookie但我无法从表单中使用表达式获取任何值

app.post('/apolloLogin', passport.authenticate('local-login', {
    successRedirect: '/apolloMainchat', // redirect to the secure profile section
    failureRedirect: '/apolloLogin', // redirect back to the signup page if there is an error
    failureFlash: true // allow flash messages
},function(req, res){
   var username = res.query.username

    console.log("tettestset")
    //res.cookie('cookieName','randomUid', { maxAge: 900000, httpOnly: true });
}),

在这里,我将获得与用户名相关联的uid 然后像这样设置uid cookie

res.cookie('cookieName','randomUid', { maxAge: 900000, httpOnly: true });

但我的用户名值总是为null,并且说res.cookie不是函数

我在这里用快递

做错了什么

修改

现在我正在尝试这个

app.post('/apolloSignup', passport.authenticate('local-signup', {
    successRedirect: '/apolloMainchat', // redirect to the secure profile section
    failureRedirect: '/apolloSignup', // redirect back to the signup page if there is an error
    failureFlash: true // allow flash messages
},function(req, res){
    console.log(req.body.username)
}));

第二次编辑

这就是我现在正在使用的内容,我从console.log

获取空值
app.post('/apolloSignup', passport.authenticate('local-signup', {successRedirect: '/apolloMainchat',failureRedirect: '/apolloSignup',failureFlash: true}),function(req, res){
    console.log(req)
});

这就是我的HTML看起来像什么

<html>
    <head>
            <link type="text/css" rel="stylesheet" href="css/regular.css" />
            <meta name="viewport" content="width=device-width, initial-scale=1">
            <script src="/socket.io/socket.io.js"></script>
            <script src="scripts/jquery-1.11.1.js"></script>  
            <script src="scripts/bic_core.js"></script> 
    </head>
    <body>
        <div class="login-register-div" id="login-register-div">
                            <!-- show any messages that come back with authentication -->
                            <% if (message.length > 0) { %>
                                <div class="login-error">
                                    <script>
                                        $("#login-username").addClass("textboxError");
                                        $("#login-password").addClass("textboxError");
                                        </script>
                                    <%= message %>
                                </div>
                                <% } %>
                                    <!-- LOGIN FORM -->
            <div id="login-container" class="login-container">
                <form action="/apolloSignup" method="post">
                    <center><h1>Sign Up</h1></center>
                    <input type="text" placeholder="Username" class="login-username" id="login-username" name="username">
                    <input type="password" placeholder="Password" class="login-password" id="login-password" name="password">
                    <input type="submit" value="Signup" class="login-submit" id="login-submit" onclick="setCookies()">
                    <a class="signup-login-link" href="/apolloLogin">Log In</a>
                </form>
            </div>
        </div>
    </body>
</html>
<script>

2 个答案:

答案 0 :(得分:1)

我很确定,一旦到达failureRedirect / successRedirect,请求/响应周期就会结束,因此您无法访问下一个中间件。但是,如果您已正确设置护照本地身份验证,则应该可以访问req.user,其中包含已登录用户的用户名和其他信息。

尝试在/apolloMainchat路线中执行Cookie设置,引用req.user。希望有所帮助!

答案 1 :(得分:0)

看起来您正在引用res.query.username。那是无效的 - 你的意思是req.query.username吗?查询参数将位于请求对象上,而不是响应对象。

此外,如果您从HTML表单获取POST数据,则应通过req.body而不是req.query访问这些值。