2017-04-21 73 views
1

我正試圖找到有關最簡單的登錄與護照節點應用程序的資源。我的意思是,採用:Passport.js本地策略不帶貓鼬

中間件:

app.use(bodyParser.json()); 
    app.use(bodyParser.urlencoded({extended: false})); 
    app.use(cookieParser()); 

    app.use(session({ secret: 'keyboard cat', resave: false, saveUninitialized: false })); 
    app.use(passport.initialize()); 
    app.use(passport.session()); 

    app.use(express.static('public')); 

護照:

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

passport.deserializeUser(function(id, done) { 
    done({ id: id, nickname: "test"}) 
}); 


    passport.use(new LocalStrategy(
     function(username, password, done) { 
     console.log("test"); 
      if (username === 'username') { 
       return done(null, { name: "test", id: '1234'}); 
      } else { 
       return done(null, false, { message: 'Incorrect cred.' }); 
      } 
     }) 
    ) 

和重定向:

app.post('/login', 
     passport.authenticate('local', { 
      successRedirect: '/index.html', 
      failureRedirect: '/login' 
    }) 
    ); 

我的應用程序結構:

/app.js 
/public/index.html 
/public/login.html 

就是這樣。 Web充滿了帶插件的Mongoose相同的例子,每個人都簡單地複製粘貼。

問題是,我希望稍後在LocalStrategy代碼中插入自己的代碼(可能會使用LDAP)。

目前,我並沒有使用在公共文件夾中創建的頁面重定向到/index.html,而是在index.html上收到[object Object]

+0

您的代碼缺少'passport.serializeUser/deserializeUser'。添加這些後,它工作得很好(儘管'failureRedirect'指向一個不存在的URL)。 – robertklep

+0

對不起,我忘了添加它(只需編輯問題)。那麼,我的成功重定向不能按預期工作/: – Chen

+0

因此,它實際上是對'/ index.html'的請求導致了問題,而不是對'/ login'的'POST'?我沒有看到對/ index.html的請求可能會失敗。 – robertklep

回答

0

發現問題!重定向不起作用,所以我回頭看,注意到express.static mw在護照初始化()後被設置,而不是在之前。我剛搬到它的頂部和..彩虹

+0

這就是這個,很有意思。它適用於我這種方式(在'passport.initialize()'''後的'express.static()',就像你發佈的代碼一樣)。 – robertklep

+0

在這兩種情況下,我仍然在控制檯上發現錯誤。但只有當我將「靜態」移動到開始時,重定向才起作用。 我使用express 4.15.2,護照0.3.2和節點7.9.0。 – Chen

+0

噢,我發現了問題... – robertklep

1

passport.deserializeUser()是不正確的:

passport.deserializeUser(function(id, done) { 
    done({ id: id, nickname: "test"}) 
}); 

它通過「用戶」對象作爲第一個參數done,這是留給錯誤。這會導致Express在嘗試對錯誤進行字符串處理時呈現錯誤頁面,從而導致[object Object]

試試這個:

passport.deserializeUser(function(id, done) { 
    done(null, { id: id, nickname: "test"}) 
});