2013-02-13 1 views
1

저는 노드를 처음 사용하고 노드, 익스프레스 및 패스포트 설정이 있으며 겉으로보기에 효과적입니다. 즉, 오류 메시지가 표시되지 않습니다.노드, 익스프레스 3 및 패스포트 : 로그인 양식이 작동하지 않습니다.

로그인 페이지로 이동하여 로그인하려고하면 아무 문제가 없습니다. 버튼을 클릭해도 아무런 조치도 취해지지 않은 상태에서 페이지가 새로 고침됩니다.

아래 코드를 붙여 넣었습니다. 여기

08:19:53 web.1 | POST /login 302 3ms - 68 
08:19:53 web.1 | GET /login 304 11ms 
08:19:53 web.1 | GET /stylesheets/base.css 304 1ms 

가 로그인보기 (옥)이다 : 나는 양식을 제출할 때 다음

터미널 출력의 다음
- if (message) 
    p 
    strong =message 

form(method="post", action="/login") 
    fieldset 
    label(for="username") Username 
    input.text-input(type="text", name="username") 

    label(for="password") Password 
    input.text-input(type="password", name="password") 

    button.btn-submit(type="submit") Login! 

    a.btn-cancel(href="/") Cancel 

처음 로그인 페이지를 호출하는 코드의를 (I 다른 꺼내서 명확성의 술)에 대한 물건 :

을 app.js개
app.get("/login", routes.login); 

루트 /하는 index.js

(function() { 
    var Post; 

    Post = require('../models/Post'); 

    module.exports = { 
    login: function(req, res) { 
     return res.render("login", { 
     user: req.user, 
     message: req.flash("Login error!"), 
     title: "Login | David Yeiser" 
     }); 
    } 
    }; 

}).call(this); 

그리고 여기이 게시물을 처리 app.js의 부분 :

app.post("/login", passport.authenticate("local", { 
    failureRedirect: "/login", 
    failureFlash: true 
}), function(req, res) { 
    return res.redirect("/office"); 
}); 

마지막으로, 여기에 전체 app.js의 :

(function() { 
    var LocalStrategy, app, express, findById, findByUsername, flash, http, mongoose, passport, path, routes, user, users, util; 

    express = require('express'); 
    routes = require('./routes'); 
    user = require('./routes/user'); 
    http = require('http'); 
    path = require('path'); 
    mongoose = require('mongoose'); 
    passport = require('passport'); 
    flash = require('connect-flash'); 
    util = require('util'); 
    LocalStrategy = require('passport-local').Strategy; 

    users = [ 
    { 
     id: 1, 
     username: 'bob', 
     password: 'secret', 
     email: '[email protected]', 
     id: 2, 
     username: 'nancy', 
     password: 'secrettoo', 
     email: '[email protected]' 
    } 
    ]; 

    findById = function(id, fn) { 
    var idx; 
    idx = id - 1; 
    if (users[idx]) { 
     return fn(null, users[idx]); 
    } else { 
     return fn(new Error('User does not exist')); 
    } 
    }; 

    findByUsername = function(username, fn) { 
    var i, len; 
    i = 0; 
    len = users.length; 
    while (i < len) { 
     user = users[i]; 
     if (user.username === username) { 
     return fn(null, user); 
     } 
     i++; 
    } 
    return fn(null, null); 
    }; 

    passport.serializeUser(function(user, done) { 
    return done(null, user.id); 
    }); 

    passport.deserializeUser(function(id, done) { 
    return findById(id, function(err, user) { 
     return done(err, user); 
    }); 
    }); 

    passport.use(new LocalStrategy(function(username, password, done) { 
    return process.nextTick(function() { 
     return findByUsername(username, function(err, user) { 
     if (err) { 
      return done(err); 
     } 
     if (!user) { 
      return done(null, false, { 
      message: "Unknown user " + username 
      }); 
     } 
     if (user.password !== password) { 
      return done(null, false, { 
      message: "Invalid password" 
      }); 
     } 
     return done(null, user); 
     }); 
    }); 
    })); 

    app = express(); 

    app.configure(function() { 
    app.set('port', process.env.PORT || 3000); 
    app.set('views', __dirname + '/views'); 
    app.set('view engine', 'jade'); 
    app.use(express.favicon()); 
    app.use(express.logger('dev')); 
    app.use(express.cookieParser()); 
    app.use(express.bodyParser()); 
    app.use(express.methodOverride()); 
    app.use(express.session({ 
     secret: 'keyboard cat' 
    })); 
    app.use(flash()); 
    app.use(passport.initialize()); 
    app.use(passport.session()); 
    app.use(app.router); 
    return app.use(express["static"](path.join(__dirname, 'public'))); 
    }); 

    app.configure('development', function() { 
    mongoose.connect('mongodb://localhost/davidyeiser_dev'); 
    return app.use(express.errorHandler()); 
    }); 

    app.get("/", routes.index); 

    app.get("/login", routes.login); 

    app.post("/login", passport.authenticate("local", { 
    failureRedirect: "/login", 
    failureFlash: true 
    }), function(req, res) { 
    return res.redirect("/office"); 
    }); 

    app.get("/logout", function(req, res) { 
    req.logout(); 
    return res.redirect("/"); 
    }); 

    app.get("/post/new", routes.newPost); 
    app.post("/post/new", routes.addPost); 
    app.get("/post/:id", routes.viewPost); 
    app.get("/users", user.list); 

    http.createServer(app).listen(app.get("port"), function() { 
    return console.log("Express server listening on port " + app.get("port")); 
    }); 

}).call(this); 
,210

당신이 여권 익스프레스 3 예에서 찍은 무엇을보고의 대부분은 : https://github.com/jaredhanson/passport-local/blob/master/examples/express3/

내가 어떤 도움을 감사 해요 당신이 나를 제공 할 수 있습니다.

+0

(I는 "낸시"를하려고 생각 않을 때마다 "밥"을 사용하지 않으며, 때문에 내가 예전 캐치하지 않은 이유는),이 작업을 수행하고를 호출하는 로그인 페이지로 다시 리디렉션되는 실패한 응답, 따라서 혼란. 리디렉션을 인덱스 페이지로 변경하면 리디렉션이 리디렉션되었습니다. 그러나 여전히 문제가 있습니다. - 플래시 메시지가 표시되지 않습니다. - 로컬 전략이 시작되지 않은 것처럼 보이지만 효과적인 행동을 측정하는 방법을 잘 모르겠습니다. 내부에서 함수 이름을 변경하여 횡설수설하게 만들었지 만, 오류가 발생하여 의심스러운 것으로 의심됩니다. - 봤 거든/뭉치 넘쳐 뭉치하지만 같은 문제가있는 사람을 보지 못했어요 –

+0

아마 너무 복잡하고 여권과 함께하고 그냥이 예제와 같이 가야합니까? https://github.com/visionmedia/express/tree/master/examples/auth –

+0

위의 링크는 Express FAQ의 http://expressjs.com/faq.html 링크입니다. –

답변

2

아하! 사용자 배열이 제대로 구성되지 않았습니다. 될 필요가

users = [ 
    { 
     id: 1, 
     username: 'bob', 
     password: 'secret', 
     email: '[email protected]', 
     id: 2, 
     username: 'nancy', 
     password: 'secrettoo', 
     email: '[email protected]' 
    } 
    ]; 

: 다음 결국이 오류 깨달았다 그것은 내가 단지 (1,000 약 다른 것들의 중간에) 하나의 사용자로 감소되었다 발견

users = [ 
    { 
     id: 1, 
     username: 'bob', 
     password: 'secret', 
     email: '[email protected]' 
    }, 
    { 
     id: 2, 
     username: 'nancy', 
     password: 'secrettoo', 
     email: '[email protected]' 
    } 
    ]; 

방법. 나머지는 변경되지 않습니다.

는 더 많은 테스트 후

관련 문제