【发布时间】:2016-05-26 04:10:49
【问题描述】:
在我的应用程序中,有 3 种验证方式。谷歌、Facebook 和本地。我还没有使用护照。
用户授权后,他选择一个客户端(每个用户必须至少有一个客户端)。
那么每个 API 请求都包含 3 个查询字符串参数:email、key、client。目前我正在手动将req.user 和req.client 添加到req object
我想改用护照,因为那样应用程序将很容易支持 twitter 和链接登录。
在我开始其他登录方法之前,我需要将当前应用迁移到护照。
我的应用当前未使用会话或 cookie。所有凭据数据,保存在浏览器 localStorage 中,并在每个请求中发送。我不想改变它。
问题是:如何使用email、key、client进行护照登录?如何使它添加req.client 而不仅仅是req.user。
我真的不明白我的逻辑的投注选项在哪里,以及在哪里赋予护照权力。
我是否需要使用passport.serializeUser? 在路由中放入什么,在app.use 中放入什么??
【问题讨论】:
-
Express 在用户请求中找到 cookie 后设置 req.session.passport.user。 Passport.js 使用 req.session.passport.user 的内容,然后设置 req.user ,你要做的也是设置req.client 我敢打赌最好的地方是 deserializeUser 方法。详情请看我对这个问题的回答stackoverflow.com/questions/35359295/…
-
你确定吗?我认为护照调用 deserializeUser 只是为了需要一个会话。所以它不会在用户第一次尝试登录时被调用。
-
如果您将 passport.session() 附加到应用程序,那么它会将会话附加到每个请求,这意味着每个请求都会调用反序列化用户。如果您将您的 passport.session() 放在 express 静态配置之上,那么 deserializeUser 甚至会为每个静态内容(即图像、css、javascript 等)调用一次。在此处阅读我关于序列化和反序列化用户的答案stackoverflow.com/questions/34675655/…
-
但是第一个请求在验证会话后创建而不是恢复。 deserialUser 仅在从会话中恢复用户时调用。在auhtenticate 成功后,我确定deserialaizerUser 函数不会运行。并且想知道我想要 req.client 而不是 session.client。这是无状态的应用程序
标签: node.js express passport.js