Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/43.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 验证参数并重定向到已验证的参数?_Javascript_Node.js_Express_Login_Passport Local - Fatal编程技术网

Javascript 验证参数并重定向到已验证的参数?

Javascript 验证参数并重定向到已验证的参数?,javascript,node.js,express,login,passport-local,Javascript,Node.js,Express,Login,Passport Local,我试图制作一个有不同用户的应用程序。用户可以登录、查看和操作相同的数据。我想,既然我可以列出用户对象并对其进行身份验证,为什么还要用相同的数据为每个用户创建一个完全不同的文档呢。我想设置类似于users/user1users/user2的路由。用户1不能直接转到url栏并将user1更改为user2我在尝试创建url时遇到问题,因此用户无法通过键入更改来访问url 因此,我有一个包含如下用户列表的文档: { list: 'userList', users: [ { password:

我试图制作一个有不同用户的应用程序。用户可以登录、查看和操作相同的数据。我想,既然我可以列出用户对象并对其进行身份验证,为什么还要用相同的数据为每个用户创建一个完全不同的文档呢。我想设置类似于
users/user1
users/user2
的路由。用户1不能直接转到url栏并将
user1
更改为
user2
我在尝试创建url时遇到问题,因此用户无法通过键入更改来访问url

因此,我有一个包含如下用户列表的文档:

{ list: 'userList',
  users:
   [ { password: 'pass1', username: 'user1' },
     { username: 'user2', password: 'pass2' },
     { username: 'user3', password: 'pass3' } ],
  address: '14453 ny 14456',
  desc: '3 floors',
  __v: 0,
  _id: 56baf181356641f01213295a }
我的护照是这样设置的

passport.use("local", new LocalStrategy(
    function(username, password, done){
        User.findOne({ "users": { $elemMatch :{username : username}} }, function(err, user){
            // console.log("user " + user)
            if(err){return done(err);}
            if(!user){
                console.log("no user")
                return done(null, false,{message : "Incorrect username."});
            }
            if(!user.validPassword( username, password)){
                return done(null, false,{message : "Incorrect password."});
            }
            return done(null, user)
        })
    }))
这是我觉得自己很愚蠢的部分。在
users/:name
上有一个表单,当他们提交表单时,我希望将用户重定向回
users/:name
。我知道怎么做。但是我试图通过让用户只能够通过添加计数器查看他们的url来修复该部分,如果计数器小于1,则将名称设置为变量
name
,这样
name
就不能再分配了。因此,您只能对名称进行一次比较。一切都搞砸了

基本上,当用户提交表单时,我需要指向原始url(
users/:name
)。用户不能在url栏中删除user1(:name)并键入user2。他必须自己登录

app.post("/login", function(req, res, next){
    console.log("posted")
    passport.authenticate("local",{
        successRedirect : "/users/" + req.body.username,
        failureRedirect : "/login",
        failureFlash : true
    })(req, res, next)
} )
var counter = 0
app.get("/users/:name",  ensureAuthenticated, function(req, res){
    // console.log(req.params.name)
    counter++;
    if(counter <= 1){
        var name = req.params.name
    }

    User.findOne({"users" : { $elemMatch: { username : name}}}, function(err, doc){
        if(!doc){
            res.redirect("../login")
            counter = 0;
        } else{

            console.log("test ", doc);
            var users = doc.users;
            var currentUser = {};

            for(var i = 0; i < users.length; i++){
                if(users[i].username === name){
                    currentUser = users[i];
                }
            }
            console.log("currentUser ", currentUser)
            if(currentUser.username === name ){
                res.render("users", {result : doc, user : currentUser.username});
            }           
        }


    })

})

app.post("/users", function(req, res){
    // console.log(req.protocol + "://" + req.get("host") + req.originalUrl )
    // console.log(req.body.subject, " " ,  req.protocol , " ", req.get("host") , " " ,  req.originalUrl)
    res.redirect("back")
    // res.redirect(req.protocol + "://" + req.get("host") + req.originalUrl + req.params.name)
})
html
    head
    body
        p Welcome #{user}
        p= result.address
        h3= result.desc
        a(href="/logout") logout
        form(action = "/users" method = "POST")
            label delete:
            input(type = "text" name="subject")
            input(type="submit" value = "delete")