javascript - 使用 Passport 的 Node.js 用户身份验证

标签 javascript node.js express coffeescript passport.js

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

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

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

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 的作者)。另一个混淆可能与 express 版本和我对 npm 的混淆有关。我相信我测试了最新的 express v2,但我也测试了我现在正在运行的 v3。对于第三版,您可能还应该查看 Github 上的 connect-flash 模块,因为 Jared 示例中使用的一些“flash”内容已从 express v3 中移出(因此模块把它放回......)。最后,确保您使用正确命名的输入名称(默认情况下为 usernamepassword)发帖。

最佳答案

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

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

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

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

关于javascript - 使用 Passport 的 Node.js 用户身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10969299/

相关文章:

javascript - Bootstrap 网格对齐与 Angular JS

node.js - NodeJS 的 Kdb+ 驱动程序

ssl - compoundjs 同时支持 ssl 和普通的 http

javascript - object_to_array 和编码 - php 到 js 对象

javascript - 在 javascript 构建的表上使用 jquery

javascript - 在执行淡出和淡入时更新内容

mysql - 我该如何解决这个问题? ( Node 、mysql 和异步/等待)

javascript - NodeJS(后端)从POST调用接收数据然后如何在ReactJS(前端)中显示?

express - Stripe CLI 触发随机事件而不是 payment_intent.succeeded

java - 我应该如何设计一个 wordpress 后端 + react + java 前端应用程序?