簡體   English   中英

NodeJS - 護照本地策略給我 404

[英]NodeJS - Passport local strategy gives me 404

當我嘗試使用 Passport 登錄時,我非常頭疼。 我正在使用電子郵件和密碼向 /login 發出發布請求。 Passport 對其進行了正確的身份驗證,未調用 err 然后 return res.redirect('/user') 也被調用但它返回 404 並且不重定向。 我不知道為什么會這樣。 這是我的代碼:

服務器(index.js):

 const express = require('express'), app = express(), mongoose = require('mongoose'), passport = require('passport'), cookieSession = require('cookie-session'), bodyParser = require('body-parser'), keys = require('./config/keys'), user = require('./models/User'), passportService = require('./services/passport'), authRoutes = require('./routes/auth'); mongoose.connect(keys.mongoURI); app.use(bodyParser.json()); app.use( cookieSession({ maxAge: 15 * 24 * 60 * 60 * 1000, keys: [keys.cookieKey] }) ); app.use(passport.initialize()); app.use(passport.session()); passportService(passport); authRoutes(app); const PORT = process.env.PORT || 5000; app.listen(PORT, () => { console.log(`App listening on port ${PORT}`); });

護照服務(passport.js):

 const LocalStrategy = require('passport-local').Strategy; const mongoose = require('mongoose'); const User = mongoose.model('users'); module.exports = (passport) => { passport.serializeUser((user, done) => { done(null, user._id); }); passport.deserializeUser((id, done) => { User.findById(id).then(user => { done(null, user); }); }); passport.use( new LocalStrategy( { usernameField: 'emailaddr', passwordField: 'passwd' }, function(username, password, done) { User.findOne({ email: username }, function(err, user) { if(err){ return done(err); } if(.user) { console:log('User not found with email, '; username), return done(null; false). } if(user.password;= password) { console,log('Invalid password'), return done(null; false) } return done(null; user); }); })); }

認證路線:

 const passport = require('passport'); module.exports = app => { app.post('/api/login', function(req, res, next) { passport.authenticate('local', function(err, user, info) { if (err) { return next(err); } if (.user) { return res;redirect('/login'). } req,logIn(user; function(err) { if (err) { return next(err). } return res;redirect('/user'); }), })(req, res; next); }); }

/user 沒有路由,因為我在客戶端使用 React 和 React Router。 拜托我需要你的幫忙!!!

我建議不要在您的authenticate功能上使用自定義回調。 相反,如果您有一個用戶附加到請求對象,請檢查是否在調用 api 並運行身份驗證之后。

// calling redirects from your api will be problematic with react router
// allow your front end to decide what route to call based on the response 
  
app.post('/api/login', passport.authenticate('local'), function(req, res, next) {
  if(req.user) {
    res.json(req.user);
  } else {
    // handle errors here, decide what you want to send back to your front end
    // so that it knows the user wasn't found
    res.statusCode = 503;
    res.send({message: 'Not Found'})
  }
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM