Javascript 在Express重定向应用程序后调用反序列化用户
这个网站上有很多关于Javascript 在Express重定向应用程序后调用反序列化用户,javascript,node.js,express,deserialization,passport.js,Javascript,Node.js,Express,Deserialization,Passport.js,这个网站上有很多关于Passport.js函数反序列化用户从未被调用的问题。我的问题有点有趣-在我的应用程序中,函数在我的应用程序重定向后被调用。我在下面提供了我的登录代码流,按照我理解调用各种函数的顺序。我也会尽量避免任何不必要的细节 在我的应用程序中,Passport.js配置了LocalStrategy //配置passport.js passport.use(新本地策略)(用户名、密码、完成)=>{ log(“在Passport的本地策略回调中…”); //在数据库中搜索用户 db.qu
Passport.js
函数反序列化用户
从未被调用的问题。我的问题有点有趣-在我的应用程序中,函数在我的应用程序重定向后被调用。我在下面提供了我的登录代码流,按照我理解调用各种函数的顺序。我也会尽量避免任何不必要的细节
在我的应用程序中,Passport.js
配置了LocalStrategy
//配置passport.js
passport.use(新本地策略)(用户名、密码、完成)=>{
log(“在Passport的本地策略回调中…”);
//在数据库中搜索用户
db.query(“从用户中选择*”,异步(错误、结果、字段)=>{
if(err){//处理错误,抽象掉}
否则{
//在数据库中搜索用户
for(设i=0;i
序列化用户
和反序列化用户
的构造如下。似乎没有在正确的时间调用反序列化用户
。请特别注意console.log()
函数顶部的语句。
passport.user((用户,完成)=>{
log(“序列化用户”+user.username+“并将其ID存储到会话文件存储…”);
返回完成(null,user.id);
});
passport.deserializeUser((id,done)=>{
log(“试图反序列化ID为“+ID+”的用户”);
db.query(“从用户中选择*”,异步(错误、结果、字段)=>{
if(err){//处理数据库错误,抽象掉}
否则{
for(设i=0;i
我网站上的登录表单包含用户名和密码字段。以下是处理此页面的GET
ting的路径
app.get('/login',(req,res)=>{
日志(“下面的Flash消息”);
控制台日志(请求会话闪存);
if(req.isAuthenticated())res.redirect('/');
否则{
log(“在“+now()+”上请求的登录路由”);
res.render('login.html');
}
});
登录表单将发布到此处理程序:
app.post('/login',passport.authenticate('local'),
{
successRedirect:“/profile”,
successFlash:“成功登录!”,
failureRedirect:“/login#main content”,
failureFlash:“登录失败。”
}
));
/profile
路由的路由处理程序如下所示
app.get('/profile',(req,res)=>{
if(req.isAuthenticated()){//加载配置文件页,抽象掉}
否则{
console.log(请求用户?\n请求用户:“+req.user:”\n配置文件请求未通过身份验证!”)
req.flash('访问',“您需要登录才能访问您的个人资料!”);
res.redirect('/login');
}
});
最后,这里是我的应用程序主页的处理程序
app.get('/',(req,res)=>{
log(“\n在“+now()+”…”上请求的主页);
log(req.isAuthenticated()?“登录主页请求”。:“注销主页请求”);
控制台日志(请求用户);
log(“请求会话ID:+req.sessionID+”\n”);
res.render('index.html');
});
观察上面代码中的console.log()
片段。下面是从用户将登录表单发布到我的网站开始的输出。(请原谅,颜色太糟糕了,这是从一个Docker集装箱里弄来的!)
根据控制台输出,功能流程如下所示:
表单被发布到登录POST
路径,该路径调用passport.authenticate()
passport.authenticate()
然后调用LocalStrategy
回调,它在数据库中搜索用户。在这里,搜索成功,找到了用户
然后调用serializeUser
,然后,应用程序在调用反序列化user
函数(再次成功)之前重定向到配置文件页面
在配置文件页面上,请求未经验证(因为配置文件是在反序列化发生之前请求的),因此我们重定向到登录页面
在登录页面中,已存储成功登录的闪存消息,这表明登录失败
main_website | Inside Passport's Local Strategy callback...
main_website | Username and password match for user2!
main_website | Serializing the user user2 and storing their ID to the session file storage...
main_website |
main_website | Request for profile is not authenticated!
main_website | Attempting to deserialize user with ID 2...
main_website | Deserialization was a success. User user2 has been found.
main_website | Flash messages below.
main_website | { success: [ 'Logged in successfully!' ] }
main_website |
main_website | Home page requested on 2/11/2020, 00:22:58...
main_website | Logged-out request for homepage.
main_website | undefined
main_website | Requesting session ID: 85a5fd86-57a2-4957-a1e0-dc6cde6a501b