【发布时间】:2014-10-12 01:02:51
【问题描述】:
我真的希望这不是一个愚蠢的问题,但我怀疑它是。我已经用谷歌搜索了所有我能理解的东西,但我仍然不明白如何读取使用 nodejs/express/passport 设置的 cookie。
我正在使用 Angular 的 ngCookies 和 $cookies 服务,但是当我尝试打印出我在服务器端设置的 cookie 时,我看到了这个(使用 console.log($cookies["connect.sess"]))
s:j:{"passport":{"user":{"id":1,"email":"xxxxxx@yyyy.com","role":"Admin"}}}.0lKpQzpgzCAjgkIayDkUiOLhktIYsohr61U/4xSwWFA
我的 cookie 在里面。但它都存储为一个字符串,周围有其他东西。我应该看一个不同的对象吗?它不会让我访问 -->
$cookies["connect.sess"].passport
因为这是未定义的,这是有道理的,因为 $cookies["connect.sess"] 返回一个字符串。关于我在哪里出错的任何提示?我需要做的就是访问这些在服务器中设置的 cookie。我不需要改变它们。我希望对此有更多的关注可以解决问题。我难住了!
我尝试使用 res.cookie 设置我自己的 cookie。在我创建 cookie 的服务器端,它看起来不错。但是在 angular 之间的某个地方,它看起来像 "j:{my json cookie}" 这次没有 s: 在前面,最后没有 gobble-de-gook。当然我可以解析出这些东西并找到我的 json,但是这些东西是在哪里添加的,为什么?
我做了一些探索,如果你传入一个对象,那么 express response.cookie 会在 json 前面添加 j:。和 s: 在 json 对象之后带有简介是他们签署 cookie 的方式。所以我发现我并不真的需要护照发送的会话 cookie。我可以只使用会话 cookie 中的用户 ID 在服务器端进行身份验证,并创建自己的电子邮件和角色 cookie,使用:
res.cookie("email", user.email, {my cookie options})
res.cookie("role", user.role, {my cookie options})
而不是尝试使用 json 对象填充会话 cookie。鉴于我今天所知道的,我在下面选择的答案是最好的选择。尽管我很难相信您必须从对象中删除字符才能正确获取客户端 cookie。似乎很奇怪。我是一个 cookie 新手,所以如果有人有解释或阅读的好链接,我很乐意听到。
【问题讨论】:
-
如果它可以帮助任何人看到这个。我还在用快递3。但是最新版本的护照和角度。
标签: angularjs node.js cookies passport.js