首页 > 解决方案 > 使用 Passport.js 成功登录后如何刷新用户的用户名?

问题描述

我试图在用户成功登录网站后向用户显示“欢迎回来”用户名“”的消息。

问题是使用护照登录不是常规请求和响应,身份验证作为发布请求的参数发生。您可以在下面找到我的代码:

var express = require("express");
var router = express.Router();
var user = require("../models/user");
var passport = require("passport");

router.get('/register', (req,res) =>{
    res.render('register');
});

router.post('/register', (req,res) =>{
    user.register(
        new user({username: req.body.username}),
        req.body.password,
        (err, newUser) => {
            if(err){
                req.flash("error", err.message);
                return res.redirect("/register");
            }
            passport.authenticate("local")(req, res, function(){
                req.flash("success", "Successfully registered, welcome "+user.username.charAt(0).toUpperCase() + user.username.slice(1)+"!");
                res.redirect("/");
            });
        }
    );
});

router.get('/login', (req,res) =>{
    res.render('login');
});

router.post('/login', passport.authenticate("local",{
    successRedirect: "/",
    failureRedirect: "/login",
    failureFlash: true,
    successFlash: 'Welcome back!'//HERE IS WHERE I AM INTERESTED
}), (req,res) =>{
});

router.get('/logout', (req,res) =>{
    req.logout();
    req.flash("success", "Successfully Logged Out")
    res.redirect("/");
});

module.exports = router;

标签: javascriptnode.jsexpresspassport.js

解决方案


在 的第二个参数中router.post,调用passport.authenticate来处理 failureRedirect 和 failureFlash 消息。然后,对于第三个参数,使用 req 和 res 编写回调函数。在此函数的主体中,您将处理“成功”闪存消息,并且您可以访问请求对象上的用户名。然后你可以做你的 res.redirect。

router.post(
    "/login",
    passport.authenticate("local", {
        failureRedirect: "/login",
        failureFlash: true
    }),
    (req,res) => {
       req.flash("success", "Welcome back!"//add your username variable here);
       res.redirect("/home");
    });

推荐阅读