当前位置: 首页 > 知识库问答 >
问题:

Passport身份验证成功,但未重定向,并给出500个错误

汪飞捷
2023-03-14

我正在学习mean stack通过制作一个像twitter这样的社交媒体网络应用程序,但在注册或登录时,我获得了成功,一个用户也在数据库中创建,但页面没有重定向,并给出错误500

下面是代码

var express = require('express');  
var path = require('path');  
var favicon = require('serve-favicon');  
var logger = require('morgan');  
var cookieParser = require('cookie-parser');  
var bodyParser = require('body-parser');  
var session = require('express-session');  
var passport = require('passport');  
var LocalStrategy   = require('passport-local').Strategy;  
require('./models/models.js');  
var index = require('./routes/index');  
var api = require('./routes/api');  
var authenticate = require('./routes/authenticate')(passport);  
var mongoose = require('mongoose');  
mongoose.connect('mongodb://localhost:27017/chirp-test');  

var app = express();    


app.set('views', path.join(__dirname, 'views'));  
app.set('view engine', 'ejs');  

app.use(logger('dev'));  

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

app.use(bodyParser.json());  
app.use(bodyParser.urlencoded({ extended: false }));  
app.use(cookieParser());  
app.use(express.static(path.join(__dirname, 'public')));  
app.use(passport.initialize());  
app.use(passport.session());  

var initPassport = require('./passport-init');  
initPassport(passport);  

app.use('/', index);  
app.use('/auth', authenticate);  
app.use('/api', api);    


app.use(function(req, res, next) {  
  var err = new Error('Not Found');  
  err.status = 404;  
  next(err);  
});    

app.use(function(err, req, res, next) {  
  res.locals.message = err.message;  
  res.locals.error = req.app.get('env') === 'development' ? err : {};    

  res.status(err.status || 500);  
  res.render('error');  

});  

module.exports = app;

var express=require(“express”);var router=express.router();

module.exports=函数(passport){

router.get('/success', function(req, res){
    res.send({state: 'success', user: req.user ? req.user : null});
});

router.get('/failure', function(req, res){
    res.send({state: 'failure', user: null, message: "Invalid username or password"});
});

//log in
router.post('/login', passport.authenticate('login', {
    successRedirect: '/auth/success/',
    failureRedirect: '/auth/failure'
}));

//sign up
router.post('/signup', passport.authenticate('signup', {
    successRedirect: '/auth/success',
    failureRedirect: '/auth/failure'
}));

//log out
router.get('/signout', function(req, res) {
    req.logout();
    res.redirect('/');
});

return router;

}

var passport = require('passport');
var LocalStrategy   = require('passport-local').Strategy;
var bCrypt = require('bcrypt-nodejs');
var mongoose = require('mongoose');
var User = mongoose.model('User');
var Post = mongoose.model('Post');

module.exports = function(passport){


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

    passport.deserializeUser(function(id, done) {
        User.findById(id, function(err, user){
            if(err){
                return done(err, false);
            }
            if(!user){
                return done('User not found', false);
            }
            return done(user, true);
        })
    });

    passport.use('login', new LocalStrategy({
        passReqToCallback : true
    },
    function(req, username, password, done) {

        User.findOne({'username': username}, function(err, user){
            if(err){
                return done(err, false);
            }
            if(!user){
                return done('Username does not exist ', false);
            }
            if(!isValidPassword(user, password)){
                return done('Incorrect password', false);
            }
            return done(null, user);
        });
    }
));

    passport.use('signup', new LocalStrategy({
        passReqToCallback : true 
    },
    function(req, username, password, done) {

        User.findOne({'username' : username}, function(err, user){
            if(err){
                return done(err, false);
            }
            if(user){
                return done('Username already taken', false);
            }

            var newUser = new User();

            newUser.username = username;
            newUser.password = createHash(password)

            newUser.save(function(err, user){
                if(err){
                    return done(err, false);
                }
                console.log('Successfully signed up User ' + username);
                return done(null, newUser);
            });
        });
    })
);

    var isValidPassword = function(user, password){
        return bCrypt.compareSync(password, user.password);
    };

    var createHash = function(password){
        return bCrypt.hashSync(password, bCrypt.genSaltSync(10), null);
    };

};

共有1个答案

盖昀
2023-03-14

错误出现在passport-init.js中的某个位置,在该位置,您以字符串作为第一个参数调用done(),例如done('user not found',false)

您想要做的是抛出一个实际错误:

done(new Error('User not found'), false);

以后再处理。一旦发现错误,就可以找到重定向到(不)工作的原因。

 类似资料:
  • 我的管理员控制器扩展了控制器类,在那里我使用方法加载视图页面并传递保护。config/auth.php也通过添加管理员保护和提供程序进行了修改。在app/Actions/Fortify文件夹中,我添加了AttemptToAuthenticate和ReDirectIfTwoFactorAuthenticate类,并更改了命名空间。我的管理员控制器还扩展了Guard。用户的重定向中间件和管理员的重定向

  • 我是新的(护照)在laravel。是否有可能使用 即使使用了laravel内置身份验证?

  • 我为应用程序的SAML身份验证设置了OneLogin。我的应用程序的一个功能向用户发送通知链接以进行某些调查。当用户单击链接时,它会将用户带到OneLogin页面进行身份验证。认证成功后,用户将被重定向到应用程序的默认页面,而不是用户应该处理的调查页面。当前的OneLogin设置将消费者URL设置为默认值。我的申请的aspx页面。在网络中。配置我添加了一个登录endpoint连接器信息。OneLo

  • 我正在laravel中创建一个多身份验证系统,其中有两种类型的用户:管理员(由我创建)和用户(使用本地laravel身份验证系统)。 如果我以用户身份登录,当我尝试访问登录页面时,当我已经登录,它会将我重定向回仪表板,但如果我以管理员身份登录,当我再次访问管理员登录页面时,它会让我再次登录,尽管已经作为管理员登录。 以下是我的重定向身份验证类代码: 有人能解释一下发生了什么事吗?

  • Flatter Web(Navigator 2.0/Router API):如何处理经过身份验证的路由及其成功身份验证后的重定向? e、 g.我的系统中有这种路由 若用户直接打开这个URL,我想让用户先登录,那个么路由将被重定向到。。 一旦登录,我想用户导航以前打开的网址,如果有任何其他主页。。 似乎这种事情可能会有所帮助,任何想法——我们如何才能实现类似的事情?https://stackover

  • 我是Spring安全和SAML2的新手,我被要求在SAML2的Spring安全SP中实现SSO。在用户试图从SP接收未经授权的资源后,我试图做一个由IDP发起的SSO(在我的情况下是SSO圈)。之后,idp重定向用户从身份验证,当身份验证阶段成功完成时,用户被重定向到https://localhost/webinterface/saml/SSO而不是用户试图达到的资源,如果用户想要达到的资源是例如