簡體   English   中英

為什么我在Passport JS中的自定義回調不起作用?

[英]Why doesn't my custom callback in Passport JS work?

我試圖讓用戶能夠注冊我的網站,並將憑據存儲在mongodb上。

這是我的auth.js文件,其中定義了路由:

router.post('/signup', (req,res,next) => {
    Passport.authenticate('local-signup', err => {
    if (err) {
        if (err.name === "MongoError" && err.code === 11000) {
            res.status(409).json({
                success: false,
                message: "Unsuccessful",
                errors: {
                    email: "This email is already taken."
                }
            });
        }
        res.status(400).json({
            success: false,
            message: "Unsuccessful",
            errors: {
                unknown: "Could not process for some reason. Contact admin."
            }
        });
    }        
    res.status(200).json({
        success: true,
        message: "Successful",
        errors: {}
    });
}) (res, req, next);
}

最后一個括號有些混亂,但是請相信我,這不是語法錯誤。 這個代碼段是我定義護照策略的地方:

require ('../Models/Users')
const mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/onlinestore');
const User = mongoose.model('User');
const PassportLocalStrategy = require('passport-local').Strategy;
const Passport = require('passport');

module.exports = Passport.use(new PassportLocalStrategy({
        usernameField: 'email',
        passwordField: 'password',
        session: false,
        passReqToCallback: true,
    }, (email, password, done) => {              
        let user = new User();
        user.email = email.trim();
        user.password = password.trim();
        user.save(err => {
            if (err) {
                console.log(err);
                return done(err);
            } else {
                console.log("Success");
                return done(null);
            }
        });
    }
));

該路由能夠獲取用戶輸入的密碼和用戶。 當我單擊提交時,實際上什么也沒有發生。 服務器沒有控制台,客戶端也沒有。 經過一番調試后,我認為問題是由於未調用Passport.Authenticate導致的,但我不確定為什么。 如果需要,我可以發布其他代碼段,謝謝!

這是OP。 我能夠找到解決方案。 1)在我的auth.js文件中,

Passport.authenticate('local-signup', err => {

將“ local-signup”替換為“ local”,因此它變為:

Passport.authenticate('local', err => {

2)我碰巧有多種Passport策略,每種策略都在各自的文件中(一種用於登錄,另一種用於注冊)。 要使用正確的“本地”,我必須在auth.js文件中導入正確的“本地”。 夠容易的

const passport = require('../Passport/local-signup');

對於登錄,它將是一個不同的文件。

暫無
暫無

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

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