繁体   English   中英

Node.js使用护照进行用户身份验证

[英]Node.js user authentication using passport

(带序列化功能的更新代码 - 仍然重定向到/ failedRedirect)

我正在尝试使用护照包进行简单的用户名/密码验证,但失败了。 在下面的示例中,我尝试验证身份验证的工作原理基本上总是返回有效的身份验证(无论传递的是什么),但由于某种原因,它失败并且护照重定向到失败的登录链接。

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

coffeescript中的代码是:

express = require "express"
passport = require "passport"
LocalStrategy = require("passport-local").Strategy

passport.use(new LocalStrategy( (username, password, done) ->
  console.log "LocalStrategy invoked"
  done(null, {id: 1, name: "Marius"})
))

passport.serializeUser (user, done) ->
  done null, user

passport.deserializeUser (obj, done) ->
  done null, obj

app = express.createServer()

app.configure ->
  app.use express.bodyParser()
  app.use express.static("./public")
  app.use express.cookieParser("SOMESECRET")
  app.use express.session
    secret: "SOMESECRET"
    cookie:
      maxAge: 60000
  app.use passport.initialize()
  app.use passport.session()
  app.set "view", "./srv/views"
  app.set "view engine", "jade"

app.get "/login", (req, res) ->
  res.send "login page"

app.post "/login", passport.authenticate("local",
  failureRedirect: "/failedRedirect"
  successRedirect: "/successRedirect"
  failureFlash: true)

app.listen 8082

解决:好的,我相信有几个原因导致我无法正常工作。 序列化的东西可能是一个(我还没有测试过),但是由于Jared说他们是需要的,我将他们留在(他是Passport的作者)。 另一个混乱可能与快递版本和我与npm的混淆有关。 我相信我测试了最新的快车v2,但我也测试了v3,我现在正在运行。 对于版本3,您可能应该检查Github上的connect-flash模块,因为Jared的示例中使用的“flash”内容被移出express v3(因此模块将其重新放入... )。 最后,请确保使用正确的命名输入名称(默认情况下为usernamepassword )发布。

在我看来,你错过了建立登录会话所必需的用户序列化逻辑。 如果我将这两个函数添加到JavaScript代码中,它可以工作:

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

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

您需要根据需要对用户进行序列化。 详细信息位于此页面的底部: http//passportjs.org/guide/configuration.html

对于我认为在本地密码策略方面遇到问题的人来说,变量名称往往是最大的问题。 在文档中它应该是大而大胆的,并且可能应该有配置值来更改它们。

我已经从这个链接http://danialk.github.io/blog/2013/02/23/authentication-using-passportjs/下载了样本代码来自https://github.com/DanialK/PassportJS-Authentication location

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 });});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM