【问题标题】:Passport authentication get the name of incoming route护照认证获取传入路由的名称
【发布时间】:2022-02-05 23:23:19
【问题描述】:

目前我对passport 有以下配置。在这里,每个登录请求都来自/login/studentsgetUserById 函数从存储在数据库中的STUDENT 表中查找用户。但是登录请求也可以来自/login/instructors,在这种情况下,我想从INSTRUCTORS 表中查找用户。但目前没有办法检查传入路由的名称。我怎么知道我的登录请求来自哪个路由?任何帮助表示赞赏:)

const initialize = (passport) => {
    passport.use(new LocalStrategy({ usernameField: 'username', passwordField: 'password' }, authenticateUser));
    passport.serializeUser((user, done) => done(null, user.ID));
    passport.deserializeUser(async (id, done) => {
        const user = await getUserById(id);
        done(null, user);
    });
};

登录路由器代码:

router
    .route('/login/students')
    .post(
        checkAuth.not, //login only if user is not in current session
        passport.authenticate('local', {
            successRedirect: '/home/students',
            failureRedirect: '/login/students',
        })
    );

【问题讨论】:

    标签: express passport.js


    【解决方案1】:

    看来我找到了解决方案。只需将passReqToCallback 设置为true

    passport.use(new LocalStrategy({ usernameField: 'username', passwordField: 'password' }, authenticateUser));
    

    然后从authencateUser,我可以像这样访问req 参数:

    const authenticateUser = async (req, username, password, done) => {
        console.log(req.url); //prints from which port this login request came
        //blah blah blah do da di do
    };
    

    【讨论】:

      猜你喜欢
      • 2017-09-13
      • 2012-12-25
      • 1970-01-01
      • 1970-01-01
      • 2018-05-25
      • 1970-01-01
      • 1970-01-01
      • 2022-08-05
      • 2017-02-15
      相关资源
      最近更新 更多