如何在angularjs中访问由passportjs设置的cookie

我真的希望这不是一个愚蠢的问题,但我怀疑是这样。 我search了一切可以理解的事情,但是我仍然不明白如何阅读使用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在那里。 但是,它们都是作为一个string存储的。 我应该看一个不同的对象吗? 它不会让我访问 – >

 $cookies["connect.sess"].passport 

因为这是不明确的,因为$ cookies [“connect.sess”]返回一个string。 任何提示,我要去哪里错了? 我需要做的就是访问服务器中设置的这些cookie。 我不需要改变它们。 我希望在这方面额外的眼睛会做的伎俩。 我很难过

我尝试通过使用res.cookie设置我自己的cookie。 在我创buildcookie的服务器端,它看起来很好。 但是在那里和angular度之间,它看起来像“j:{我的json曲奇}”这次没有:前面,没有结束的gobble-de-gook。 当然,我可以parsing这些东西,并find我的JSON,但这东西得到补充,为什么?

我做了一些戳动作和快速response.cookie添加j:如果你传递一个对象json的前面。 和s:与json对象之后的blurb是他们签名cookie的方式。 所以我发现我真的不需要护照发送的会话cookie。 我可以使用会话cookie中的userid在服务器端进行身份validation,并使用以下命令创build自己的电子邮件和angular色cookie:

 res.cookie("email", user.email, {my cookie options}) res.cookie("role", user.role, {my cookie options}) 

而不是尝试用json对象填充会话cookie。 我在下面select的答案是我所知道的最好的select。 虽然我觉得很难相信你必须从字符上去掉字符才能正确地获取客户端的cookies。 似乎很奇怪。 我是一个cookie新手,所以如果任何人有一个解释或阅读的好链接,我很乐意听到它。

Cookie总是以string的forms存储,所以这就是当你执行console.log($ cookies [“connect.sess”])时得到一个string的原因,这个string是对象的json表示。

由于你的cookie有一些非json的东西,首先你需要提取括号“{}”之间的所有内容,然后将string反序列化为一个javascript对象。

要将JSONstring反序列化为JavaScript对象,您必须使用angular.fromJson(json)。

例:

 //'s:j:{"passport":{"user":{"id":1,"email":"xxxxxx@yyyy.com","role":"Admin"}}}.0lKpQzpgzCAjgkIayDkUiOLhktIYsohr61U/4xSwWFA'; var s = $cookies["connect.sess"]; // First extract json object from the crazy cookie string //There is also an option to to this with regular expressions var jsonString = s.substring(s.indexOf("{"), s.lastIndexOf("}") + 1); // Then convert to a javascript object var obj = angular.fromJson(jsonString); var passport = obj.passport; 

https://docs.angularjs.org/api/ng/function/angular.fromJson