Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Node.js使用passport进行用户身份验证_Javascript_Node.js_Express_Coffeescript_Passport.js - Fatal编程技术网

Javascript Node.js使用passport进行用户身份验证

Javascript Node.js使用passport进行用户身份验证,javascript,node.js,express,coffeescript,passport.js,Javascript,Node.js,Express,Coffeescript,Passport.js,(使用序列化函数更新代码-仍然重定向到/failedRedirect) 我正在尝试使用passport包进行简单的用户名/密码验证,但失败了。在下面的示例中,我尝试通过基本上总是返回有效的身份验证来验证身份验证是否有效(不管通过了什么),但由于某种原因,它失败了,passport重定向到失败的登录链接 如果有人能帮我弄清楚如何让这个例子简单地验证任何东西,我应该能够从那里管理 coffeescript中的代码是: express=需要“express” passport=需要“passport”

(使用序列化函数更新代码-仍然重定向到/failedRedirect)

我正在尝试使用passport包进行简单的用户名/密码验证,但失败了。在下面的示例中,我尝试通过基本上总是返回有效的身份验证来验证身份验证是否有效(不管通过了什么),但由于某种原因,它失败了,passport重定向到失败的登录链接

如果有人能帮我弄清楚如何让这个例子简单地验证任何东西,我应该能够从那里管理

coffeescript中的代码是:

express=需要“express”
passport=需要“passport”
LocalStrategy=require(“passport local”)。策略
passport.use(新的本地策略((用户名、密码、完成)->
console.log“LocalStrategy已调用”
完成(null,{id:1,名称:“Marius”})
))
passport.user(用户,完成)->
完成空,用户
passport.deserializeUser(obj,完成)->
完成空,obj
app=express.createServer()
app.configure->
app.use express.bodyParser()
应用程序使用快速静态(“/公共”)
app.use express.cookieParser(“SOMESECRET”)
app.use express.session
秘密:“一些秘密”
曲奇:
最大年龄:60000
app.use passport.initialize()
app.use passport.session()
app.set“view”、“/srv/views”
app.set“查看引擎”、“翡翠”
app.get“/登录”,(请求、回复)->
res.send“登录页面”
app.post“/登录”,passport.authenticate(“本地”,
failureRedirect:“/failedRedirect”
successRedirect:“/successRedirect”
failureFlash:正确)
app.listen 8082

解决:好的,我相信我有几个原因不能让它工作。序列化的东西可能是其中之一(我还没有测试),但既然Jared说需要它们,我就把它们留在里面(他是Passport的作者)。另一个困惑可能与express版本和我对npm的困惑有关。我相信我已经测试了最新的express v2,但我也测试了v3,我现在正在运行它。对于第三版,您可能还应该查看Github上的
connectflash
模块,因为Jared示例中使用的“flash”部分已从express v3中移出(因此该模块将其放回…)。最后,请确保使用正确命名的输入名称(默认情况下,
用户名
密码

在我看来,您缺少建立登录会话所需的用户序列化逻辑。如果我将这两个函数添加到JavaScript代码中,它会起作用:

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

passport.deserializeUser(function(obj, done) {
  done(null, obj);
});

您需要根据需要序列化用户。详细信息见本页底部:

对于我所看到的在本地密码策略方面遇到问题的人来说,post变量名往往是最大的难题。文档中可能会有大的粗体字,并且可能会有配置值来更改它们。

我已经成功地从这个链接中完成了更改 从以下位置下载示例代码:

routes.js中只需要一个更改 更改代码

app.post("/login" ,passport.authenticate('local',{successRedirect : "/",failureRedirect : "/login",  }));
到------------------------------

app.post("/login" ,passport.authenticate('local',{failureRedirect : "/login"}), function(req,res){ res.render('your home page here', {user : req.user });});

更新了相关代码以包含序列化函数,但在我这方面身份验证仍然失败。更新后的代码是否在您端成功进行身份验证?谢谢,是的。您的代码是否打印出“LocalStrategy已调用”消息。它可能有助于装载app.use(express.errorHandler({dumpExceptions:true,showStack:true}))并查看是否引发任何异常。在我的末尾,甚至“调用”消息都不会显示。我会试试你的errorHandler,看看有没有什么弹出,什么都没有。既然你已经确认了你这边正在运行的东西,那一定是我这边的版本不匹配(根据npm,我正在运行所有最新的东西)。非常恼人的是,甚至连一条错误信息都没有,完全没有声音。哦,好吧。。如果我弄明白了,我会发回的。感谢您的尝试。现在似乎有配置值可以更改它们。这一页的底部:是的,这只狗咬了我两天的屁股。