我設置了我認爲最簡單的auth可能 - 一個網站加載在屏幕上登錄,用戶輸入憑據的形式,在提交我使用護照。 JS和Sequelize來檢查證書。大多數這些都是從各種教程或Passport網站本身複製的。 不管我做什麼,改變或嘗試,只要我點擊表單提交按鈕,網站就掛起。在開發工具網絡選項卡中,我只是將/ login的發佈請求顯示爲掛起。更多Passport.js的困境 - 掛在表單提交
爲了消除所有可能的附加問題,我剝離了Sequelize,並使用了硬編碼的用戶,在本地使用示例。不過,對Sequelize來說沒有任何變化,這不是問題所在。
我敢肯定,這是愚蠢的。我已經嘗試了明顯的解決方案,例如確保我的表單正在發送「用戶名」和「密碼」。
我的形式如下:
form(method="post", action="/login")
fieldset
legend Please Log In
label(for="username") Username:
input#username(type='text', name="username", autocomplete="off")
label(for="password") Password:
input#password(type='password', name="password")
button#login(type="submit") Log In
在節點我app.js使用路由器,其中包括這樣的:
var login = require('../app/controllers/login');
app.get('/', login.index);
app.post('/login', login.auth);
的頁面加載的GET請求確定。在發佈它指向此:
exports.auth = function (req, res, next) {
console.log(req.body);
passport.authenticate('local', {
successRedirect: '/home',
failureRedirect: '/',
failureFlash: true
});
};
console.log(req.body)出現良好,顯示錶單值,所以我們對這一點很好。但是沒有任何事。這是最後一部分:
passport.use(new LocalStrategy(
function(username, password, done) {
console.log('local strat invoked');
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);
});
}
));
我換出用於Sequelize檢查DB與此findByUsername功能的用戶(複製並從護照GitHub的頁面上輸入後直接粘貼)的代碼,但因爲console.log('本地策略被調用')永遠不會出現,所以在這一點之後我甚至都不會猜測。
還包括passport.serializeUser和passport.deserializeUser,但我無法想象這些問題在我卡住的階段。
任何想法我錯過了什麼步驟來得到這個工作?
調用是問題謝謝!中間件方法我永遠無法完成,所以我需要重新審視它。 – DrHall