javascript - 使用 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;
解决方案
在 的第二个参数中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");
});
推荐阅读
- php - 无法从 laravel 中的驱动器中删除图像
- c# - 使用 EvoPdf 签署 Pdf 文档
- javascript - 等待不起作用,执行继续进行
- angular - 如何在 mat-option 中使用 mat-grid 或网格列表而不是使用 css 显示网格
- google-apps-script - Google Script :: 如何修复无法读取未定义的属性“关键字”
- sql - ANTLR4:在多个规则(AND,BETWEEN AND)中使用的关键字的解析器规则的排序问题
- fabricjs - 带有Fabricjs的角度6更新折线点错误
- google-drive-api - 从团队驱动器中移动文件夹
- operating-system - 资源分配图算法如何防止死锁?
- python - 如何使用自己的功能扩展 sqlite3 连接对象?